[英]Python regex match whole string only
有没有简单的方法来测试正则表达式是否匹配Python中的整个字符串? 我认为将$
放在最后会这样做,但事实证明$
在尾随换行符的情况下不起作用。
例如,以下返回匹配,即使这不是我想要的。
re.match(r'\w+$', 'foo\n')
你可以使用\\Z
:
\\Z
仅匹配字符串末尾的匹配项。
In [5]: re.match(r'\w+\Z', 'foo\n')
In [6]: re.match(r'\w+\Z', 'foo')
Out[6]: <_sre.SRE_Match object; span=(0, 3), match='foo'>
您可以使用否定前瞻断言来要求$
后跟换行换行符:
>>> re.match(r'\w+$(?!\n)', 'foo\n')
>>> re.match(r'\w+$(?!\n)', 'foo')
<_sre.SRE_Match object; span=(0, 3), match='foo'>
re.MULTILINE
与此无关; OP关闭它,正则表达式仍然匹配。 问题是$
总是 在尾随换行符之前匹配:
当指定[
re.MULTILINE
]时,模式字符'^'
匹配字符串的开头和每行的开头(紧跟在每个换行符之后); 并且模式字符'$'
在字符串的末尾和每行的末尾(紧接在每个换行符之前)匹配。 默认情况下,'^'
仅匹配字符串的开头,'$'
仅匹配字符串的末尾, 紧接在字符串末尾的换行符(如果有)之前。
我已通过实验验证,这可以在启用re.X
正常运行。
要测试是否匹配整个字符串,只需检查匹配的字符串是否与整个字符串一样长:
m = re.match(r".*", mystring)
start, stop = m.span()
if stop-start == len(mystring):
print("The entire string matched")
注意:这与如何匹配尾随换行符的问题(您没有问过)无关。
基于@alexis回答:检查fullMatch的方法可能如下所示:
def fullMatch(matchObject, fullString):
if matchObject is None:
return False
start, stop = matchObject.span()
return stop-start == len(fullString):
其中fullString
是应用正则表达式的String, matchObject
是matchObject = re.match(yourRegex, fullString)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.