正则表达式:忽略字符串中的字符顺序

时间:2018-02-16 15:33:31

标签: regex python-3.x

有没有办法可以使用正则表达式查找不同顺序的字符? 例如: 假设我有这个字符串:

string="I want to find JKD:Jdj:SL? and YK:kd?" 

是否有可用于查找YK:kd?JKD:Jdj:SL?的正则表达式 现在我只知道如何通过像

这样的方式找到具体的YK:kd?
 re.findall('\w+\:\w+\?',string)

但我不知道如何找到只包含它们的表达式:在一般意义上它们,排除顺序和数量。

2 个答案:

答案 0 :(得分:2)

添加一个可选的(至少一个)前导XXX:个字符串:

re.findall(r'((?:\w+:)+\w+\?)', string)

代码测试结果:

>>> re.findall(r'((?:\w+:)+\w+\?)', "I want to find JKD:Jdj:SL? and YK:kd?")

输出:

['JKD:Jdj:SL?', 'YK:kd?']

答案 1 :(得分:1)

使用

re.findall(r'\w+(?::\w+)+\?',string)

详细

  • \w+ - 一个或多个单词字符
  • (?::\w+)+ - 一个或多个冒号后跟一个或多个单词字符(注意使用(?:...)非捕获组,允许re.findall只返回整个匹配项< / LI>
  • \? - 问号。