在正则表达式中:
^
和\A
之间的区别是什么?$
和\Z
之间的区别是什么?答案 0 :(得分:11)
在单行模式下,$
匹配字符串的结尾,或者恰好在字符串末尾的换行符之前。在多行模式下,$
匹配字符串中的每个换行符之前。无论行模式如何,\Z
始终只匹配字符串的结尾。与^
与\A
相同。
答案 1 :(得分:7)
请参阅perldoc perlre。
\ A和\ Z就像“^”和 “$”,但他们不匹配 / m修饰符的多次 使用,而“^”和“$”将匹配 每个内线边界。匹配 字符串的实际结束而不是 忽略可选的尾随换行符, 使用\ z。
答案 2 :(得分:3)
在将字符串与多行匹配时,它们是不同的。
^可以在每个换行符后的字符串和的开头匹配。 \只能在字符串的开头匹配
$可以在每个换行符之前在字符串和的末尾匹配。 \ Z只在字符串末尾匹配。
答案 3 :(得分:0)
它们的确不同。
import re
#A. Match only single line examples
print(re.findall('^B.+d$', 'Beginning to end'))
#['Beginning to end'
print(re.findall('\AB.+d$', 'Beginning to end'))
#['Beginning to end']
#B. Match multiple lines but MULTILINE option not enabled examples
print(re.findall('^B.+d$', 'Beginning to end\nBusy street end\nBeer nuts and almond'))
#
print(re.findall('\AB.+d$', 'Beginning to end\nBusy street end\nBeer nuts and almond'))
#
#C. Match multiple lines with MULTILINE option enabled (^ and \A with re.M) examples
print(re.findall('^B.+d$', 'Beginning to end\nBusy street end\nBeer nuts and almond', re.M))
#['Beginning to end', 'Busy street end', 'Beer nuts and almond']
print(re.findall('\AB.+d$', 'Beginning to end\nBusy street end\nBeer nuts and almond', re.M))
#['Beginning to end']
#D. \Z with ^ and \A with re.M examples
print(re.findall('^B.+d\Z', 'Beginning to end\nBusy street end\nBeer nuts and almond', re.M))
#['Beer nuts and almond']
print(re.findall('\AB.+d\Z', 'Start to finish\nSpecial fish\nSuper fresh', re.M))
#
答案 4 :(得分:0)
Python 中的附加示例,因为上面的示例有点加载。在 Python 中,当使用多行模式时 ^ 和 $ 也将在每个换行符之前匹配,而当使用 /A 和 /Z 时,它只会分别匹配字符串的开头/结尾。
import re
string = "Test test test xzz\nTest 123 Test xzz"
#Test test test xzz
#Test 123 Test xzz
#Multiline mode
re.findall(r'xzz$', string, re.MULTILINE)
#['xzz', 'xzz']
re.findall(r'xzz\Z', string, re.MULTILINE)
#['xzz']
#No multiline mode
re.findall(r'xzz$', string)
#['xzz']
re.findall(r'xzz\Z', string)
#['xzz']