鱼C论坛

 找回密码
 立即注册
查看: 34|回复: 1

[已解决]python 正则表达式$使用问题

[复制链接]
发表于 2024-12-4 21:33:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有如下一段代码:
import re
text1 = 'haha'
text2 = 'haha\n'
text3 = 'haha\n\n'
text4 = 'haha\n\nha'

re1 = re.compile('$')
re2 = re.compile('.$')
re3 = re.compile('.$',flags= re.M)
res1 = re1.findall(text1)
res2 = re1.findall(text2)
res3 = re1.findall(text3)

res11 = re2.findall(text1)
res22 = re2.findall(text2)
res33 = re3.findall(text3)

res21 = re3.findall(text1)
res23 = re3.findall(text2)
res34 = re3.findall(text3)
运行程序:
>>>print(f're1:{res1},{res2},{res3}')
>>>re1:[''],['', ''],['', '']
>>>print(f're2:{res11},{res22},{res33}')
>>>re2:['a'],['a'],['a']
>>>print(f're3:{res21},{res23},{res34}')
>>>re3:['a'],['a'],['a']


疑问点:
1. 对于模式对象re1 = re.compile('$'), 执行res1 = re1.findall(text1), 是查找最后一个字符么?
2.上述三种输出的打印可否详细解释下
最佳答案
2024-12-4 21:33:57
1. 对于模式对象`re1 = re.compile('$')`,执行`res1 = re1.findall(text1)`,是查找最后一个字符么?

不是的。`$`在正则表达式中表示字符串的结尾,而不是最后一个字符。因此,`re1.findall(text1)`会在字符串的结尾处进行匹配,但由于`findall`方法返回的是匹配的内容,而`$`本身不匹配任何字符,所以结果是一个空列表。

2. 上述三种输出的打印可否详细解释下

- `re1 = re.compile('$')`:这个正则表达式匹配字符串的结尾。对于`text1`、`text2`、`text3`,`findall`方法返回的都是空列表,因为`$`不匹配任何字符。

- `re2 = re.compile('.$')`:这个正则表达式匹配字符串的最后一个字符。对于`text1`、`text2`,`findall`方法返回的都是空列表,因为`$`匹配的是字符串的结尾,而`.`需要匹配一个字符。

- `re3 = re.compile('.$', flags=re.M)`:这个正则表达式在多行模式下匹配每一行的最后一个字符。对于`text1`、`text2`、`text3`,`findall`方法返回的都是空列表,因为每一行的最后一个字符都没有被匹配到。

总结:`$`用于匹配字符串或行的结尾,而不是字符本身。`findall`方法在这种情况下返回空列表是因为没有实际的字符被匹配到。


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-12-4 21:33:57 | 显示全部楼层    本楼为最佳答案   
1. 对于模式对象`re1 = re.compile('$')`,执行`res1 = re1.findall(text1)`,是查找最后一个字符么?

不是的。`$`在正则表达式中表示字符串的结尾,而不是最后一个字符。因此,`re1.findall(text1)`会在字符串的结尾处进行匹配,但由于`findall`方法返回的是匹配的内容,而`$`本身不匹配任何字符,所以结果是一个空列表。

2. 上述三种输出的打印可否详细解释下

- `re1 = re.compile('$')`:这个正则表达式匹配字符串的结尾。对于`text1`、`text2`、`text3`,`findall`方法返回的都是空列表,因为`$`不匹配任何字符。

- `re2 = re.compile('.$')`:这个正则表达式匹配字符串的最后一个字符。对于`text1`、`text2`,`findall`方法返回的都是空列表,因为`$`匹配的是字符串的结尾,而`.`需要匹配一个字符。

- `re3 = re.compile('.$', flags=re.M)`:这个正则表达式在多行模式下匹配每一行的最后一个字符。对于`text1`、`text2`、`text3`,`findall`方法返回的都是空列表,因为每一行的最后一个字符都没有被匹配到。

总结:`$`用于匹配字符串或行的结尾,而不是字符本身。`findall`方法在这种情况下返回空列表是因为没有实际的字符被匹配到。


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 00:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表