鬼少 发表于 2024-12-4 21:38:44

python 正则表达式美元符号$用法

有如下一段代码:
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)


运行程序:
>>>print(f're1:{res1},{res2},{res3}')
>>>re1:[''],['', ''],['', '']
>>>print(f're2:{res11},{res22},{res33}')
>>>re2:['a'],['a'],['a']



疑问点:
1. 对于模式对象re1 = re.compile('$'), 执行res1 = re1.findall(text1), 是查找最后一个字符么?
2.上述输出的打印结果可否详细解释下?

FishC 发表于 2024-12-4 21:45:36


1. 对于模式对象`re1 = re.compile('$')`,执行`res1 = re1.findall(text1)`,是查找最后一个字符么?

不是的。`$`在正则表达式中表示匹配字符串的结尾,而不是最后一个字符。因此,`re1.findall(text1)`实际上是在查找字符串结尾的位置,而不是具体的字符。

2. 上述输出的打印结果可否详细解释下?

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

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

- `re3 = re.compile('.$', flags=re.M)`:这个正则表达式在多行模式下匹配每一行的最后一个字符。对于`text3`,`findall`方法返回一个空列表,因为`$`匹配的是每一行的结尾位置,而`.`需要匹配一个字符。

因此,`re1`和`re2`的输出都是空列表,因为它们的正则表达式没有匹配到任何字符。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: python 正则表达式美元符号$用法