[英]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.