None在regex中捕获组,但未按预期工作

dy2hfwbg  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(78)

下面的匹配模式会查找字符/,该字符前面没有空格,但后面有空格、点或行。

>>> import re
>>> re.search(r"[^ ]/([ .]|$)", "Foo /markup/ bar")                                                                                                                                   
<re.Match object; span=(10, 13), match='p/ '>

字符串
我感兴趣的不仅仅是/和它的位置。这里我使用简化的正则表达式作为MWE。在原来的例子中,我不能只做pos = m.start() + 1来得到/的位置。
我假设 * 没有捕获组 *((?:)),但我不能让他们工作。我期望的结果是

<re.Match object; span=(11, 11), match='/'>


我做错了什么?

>>> re.search(r"(?:[^ ])/(?:[ .]|$)", "Foo /markup/ bar")                                                                                                                             
<re.Match object; span=(10, 13), match='p/ '>

nzrxty8p

nzrxty8p1#

您可以使用

import re
m = re.search(r"(?<!\s)/(?![^\s.])", "Foo /markup/ bar")
if m:
    print(m.start()) # => 11

字符串
参见online Python demo

  • 详细信息 *:
  • (?<!\s)-负向后查找,匹配前面没有空格的位置
  • /- a /字符
  • (?![^\s.])-一个负的lookahead,需要一个空格,.字符或字符串结尾,紧邻当前位置的右边。
    注意:如果您不希望匹配在字符串的开头,请将(?<!\s)替换为(?<=\S),这将要求任何非空白字符立即出现在/字符的左侧。

相关问题