繁体   English   中英

Python正则表达式只匹配整个字符串

[英]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, matchObjectmatchObject = re.match(yourRegex, fullString)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM