缺少匹配的正则表达式概念(搜索前瞻)

时间:2013-09-14 13:57:58

标签: python regex

我想匹配“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”也应该匹配。

我缺少的概念是什么,以便所有匹配都正确?

4 个答案:

答案 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( |$)