Python regexp:匹配字符组或行尾
如何在Python regexp:匹配字符组或行尾,python,regex,Python,Regex,如何在[](字符组)中匹配^(行首)和$(行尾) 简单例子 草垛字符串:zazty 规则: 匹配任何“z”或“y” 如果前面有 a,b ;;或 在这一行的开头 通过: 匹配前两个“z” 可以工作的regexp是: (?:^[aAbB])([zZyY]) 但我一直在想,如果有这样的东西,就意味着角色组中的行的开始/结束,会更干净 [^aAbB]([zZyY]) (在该示例中,假定^表示行首,而不是字符组的实际位置,为负数) 注意:使用python。但是知道在bash和vim上这样做也很好 更
[]
(字符组)中匹配^
(行首)和$
(行尾)
简单例子 草垛字符串:
zazty
规则:
(?:^[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中,我现在陷入了withfindall()
。assearch()
也将返回与(?:…)
匹配的字符。我知道,这不是世界末日……你不能在你想要的位周围使用捕获括号并使用match.group(1)
?你已经有捕获括号了。m.start(1)
,m.end(1)
,等等。如果有消极的回头看,你实际上可以这样做,看看我的答案below@gcb,尝试向后看。search
的行为可能不同。Dom=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])