简单的正则表达式,为什么这不起作用?

时间:2011-04-13 12:50:53

标签: python regex

re.compile("a[b|c]d").findall("akjh adc abc abbd acd") 

为什么只返回

['acd']

['abd', 'acd']

修改

我给出了错误的例子......这就是原因。帖子可以删除..

3 个答案:

答案 0 :(得分:3)

正则表达式将匹配以a开头的字符串,后跟b或c,然后是d。那就是:

'ABD'

'ACD'

答案 1 :(得分:2)

你不需要字符类

中的管道
re.compile("a[bc]d").findall("akjh adc abc abbd acd") 

模式显示,搜索a,然后搜索bc(即字符类中的任何内容),然后搜索d。所以正则表达式只返回1个发现。

答案 2 :(得分:2)

您的正则表达式匹配任何以a开头的字符串,以d结尾,以及b|c

如果您要在bc之间找到ad,则可以使用不带管道的方括号(a[bc]d您在管道(a(b|c)d)中使用括号。方括号表示它们之间的任何字符被接受一次(包括|);括号表示由|分隔的任何正则表达式都被接受 - 在这种情况下,您将有两个正则表达式,一个仅匹配b而一个匹配c

我发现第一个选项是最好的选择。但是,这些正则表达式不会以任何方式与abc匹配。有很多正则表达式可以匹配两个字符串,例如a[bc][cd]或(对我来说更有意义)a(bc|cd)

HTH。