re.compile("a[b|c]d").findall("akjh adc abc abbd acd")
为什么只返回
['acd']
不
['abd', 'acd']
修改
我给出了错误的例子......这就是原因。帖子可以删除..
答案 0 :(得分:3)
正则表达式将匹配以a开头的字符串,后跟b或c,然后是d。那就是:
'ABD'
或
'ACD'
答案 1 :(得分:2)
你不需要字符类
中的管道re.compile("a[bc]d").findall("akjh adc abc abbd acd")
模式显示,搜索a
,然后搜索b
或c
(即字符类中的任何内容),然后搜索d
。所以正则表达式只返回1个发现。
答案 2 :(得分:2)
您的正则表达式匹配任何以a
开头的字符串,以d
结尾,以及b
,|
或c
。
如果您要在b
和c
之间找到a
或d
,则可以使用不带管道的方括号(a[bc]d
)或您在管道(a(b|c)d
)中使用括号。方括号表示它们之间的任何字符被接受一次(包括|
);括号表示由|
分隔的任何正则表达式都被接受 - 在这种情况下,您将有两个正则表达式,一个仅匹配b
而一个匹配c
。
我发现第一个选项是最好的选择。但是,这些正则表达式不会以任何方式与abc
匹配。有很多正则表达式可以匹配两个字符串,例如a[bc][cd]
或(对我来说更有意义)a(bc|cd)
。
HTH。