Python regexp:匹配字符组或行尾

Python regexp:匹配字符组或行尾,python,regex,Python,Regex,如何在[](字符组)中匹配^(行首)和$(行尾) 简单例子 草垛字符串:zazty 规则: 匹配任何“z”或“y” 如果前面有 a,b ;;或 在这一行的开头 通过: 匹配前两个“z” 可以工作的regexp是: (?:^[aAbB])([zZyY]) 但我一直在想,如果有这样的东西,就意味着角色组中的行的开始/结束,会更干净 [^aAbB]([zZyY]) (在该示例中,假定^表示行首,而不是字符组的实际位置,为负数) 注意:使用python。但是知道在bash和vim上这样做也很好 更

如何在
[]
(字符组)中匹配
^
(行首)和
$
(行尾)


简单例子

草垛字符串:
zazty

规则:

  • 匹配任何“z”或“y”
  • 如果前面有
  • a,b ;;或
  • 在这一行的开头
  • 通过: 匹配前两个“z”

    可以工作的regexp是:
    (?:^[aAbB])([zZyY])

    但我一直在想,如果有这样的东西,就意味着角色组中的行的开始/结束,会更干净
    [^aAbB]([zZyY])

    (在该示例中,假定
    ^
    表示行首,而不是字符组的实际位置,为负数)


    注意:使用python。但是知道在bash和vim上这样做也很好

    更新:再次阅读它所说的字符集,除了字符类(例如
    \w
    )之外,所有字符都失去了它的特殊意义

    在字符类列表的下方,行的开头有
    \A
    ,但这不起作用
    [\AaAbB]([zZyY])


    知道为什么吗?

    为什么不尝试转义字符
    \
    ?(
    [\^\$]

    更新: 如果您想查找所有Z和前面带有“a”的Z,那么可以使用正向查找。可能无法在字符组中指定通配符(因为通配符也是字符)。(我很高兴知道这件事)


    您无法在
    []
    中匹配
    ^
    $
    ,因为字符类中唯一具有特殊意义的字符是
    ^
    (如“除了一切之外”)和
    -
    (如“范围”)(以及字符类)<代码>\A和
    \Z
    不算作字符类

    这适用于所有(标准)风格的正则表达式,因此您只能使用
    (^ |[stuff])
    ($|[stuff])
    (其实这些都没那么糟糕)。

    试试这个:

    (?<![^abAB])([yzYZ])
    

    (?将字符“a”连接到字符串的开头。然后使用
    [aAbB]([zZyY])

    不,那么它只是表示文字
    ^
    ——仍然不是“行的开头”。特殊字符(例如^+!*?…)失去其意义。^变为“不”如果它是第一个字符,那么后面看的组不是无关的吗?我的意思是,您正在将一个不匹配的组传递给后面看的组。您仍然有一个不捕获的组和或此条件way@gcb,是的。但是你可能想离开它,因为它显式地表明没有匹配项。好吧,这是不好的,因为在python中,我现在陷入了with
    findall()
    。as
    search()
    也将返回与
    (?:…)
    匹配的字符。我知道,这不是世界末日……你不能在你想要的位周围使用捕获括号并使用
    match.group(1)
    ?你已经有捕获括号了。
    m.start(1)
    m.end(1)
    ,等等。如果有消极的回头看,你实际上可以这样做,看看我的答案below@gcb,尝试向后看。
    search
    的行为可能不同。Do
    m=re.search('(?:a)(z),'zazty');print m.group(1)
    。这将只提取“z”。或者,正如其他评论员所建议的,lookarounds是0宽度。我想知道正面或负面的lookarounds在这项任务中是否更有效。这实际上相当聪明
    matcher.group(0) = z
    matcher.start() = 0
    matcher.group(0) = z
    matcher.start() = 2
    
    (?<![^abAB])([yzYZ])