簡體   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