我想匹配“python”:
re.match("python", "python programming") # --> True
我想在“python”之后排除除了空格之外的其他东西的机会,所以我想:
re.match("python[^ ]", "python3 programming") # --> False
问题是,如果它只是“python”,我仍然希望匹配:
re.match("python[^ ]", "python") # --> False (Should be True)
使其成为可选项不起作用,因为它将匹配前一种情况,而应返回false:
re.match("python[^ ]?", "python3 programming") # --> True (Should be False)
re.match("python[^ ]?", "python") # --> True
“编程python”的类似情况,其中“python”也应该匹配。
我缺少的概念是什么,以便所有匹配都正确?
答案 0 :(得分:3)
您可以检查字边界\b
:
>>> re.search(r"\bpython\b", "python programming")
<_sre.SRE_Match object at 0xb72be5d0>
>>> print re.search(r"\bpython\b", "python3")
None
>>> re.search(r"\bpython\b", "programming python")
<_sre.SRE_Match object at 0xb72be5d0>
答案 1 :(得分:2)
使用negative lookahead assertion:
>>> re.search(r"python(?!\S)", "python3 programming")
>>> re.search(r"python(?!\S)", "python")
<_sre.SRE_Match object at 0x000000000298E370>
>>> re.search(r"python(?!\S)", "python ")
<_sre.SRE_Match object at 0x000000000298E3D8>
>>> re.search(r"python(?!\S)", "python!")
>>>
(?!\S)
表示“确保在正则表达式引擎的当前位置之后无法匹配除空格之外的字符”。如果空格字符或当前位置之后没有任何内容,则为真。
答案 2 :(得分:0)
您可以明确添加特殊情况:
(python[^ ])|(python$)
答案 3 :(得分:0)
使用[^ ]
,您实际上排除了空格,而不是其他所有内容。此外,为了确保您完成,您应该包括结束字符串符号。两者结合起来给你:
python( |$)