正则表达式中^和\ A,$和\ Z有什么区别?

时间:2010-11-22 20:42:00

标签: regex

在正则表达式中:

  • ^\A之间的区别是什么?
  • $\Z之间的区别是什么?

5 个答案:

答案 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']