正则表达式是一个无序列表,由python中的不同“分隔符”分隔

时间:2015-01-30 15:57:43

标签: python regex

我试图构造一个正则表达式来捕获匹配\w{0,}?\s\d){0,}的字符串,即一个单词后跟空格然后是数字。我嘲笑了here

只有逗号分隔的前N个匹配是组1 字符串'之后的N匹配opt',只用逗号分隔,是第2组 字符串'之后的N匹配和/或',只用逗号分隔,是第3组

我的尝试是:((\w+?\s\d),\s+(\w+?\s\d))*(\s+and/or\s+(\w+?\s\d))*(\s+opt\s+(\w+?\s\d))*

Mind 3 opt Life 3, Prime 3 and/or Death 3 #This is not matched
Life 3, Mind 3 opt Prime 3 and/or Death 3 #This is matched
Life 3, Death 3 and/or Mind 3 opt Prime 3 #this is matched

但是我确定我没有想到的边缘情况。我从根本上知道这与订单有关,我不想要。

1 个答案:

答案 0 :(得分:2)

(?:|\s+and/or\s+|\s+opt\s+)((\w+?\s\d)(?:,\s+(\w+?\s\d))*)*

您正在寻找三种不同的方案:

String starts with nothingString starts with ' opt 'String starts with ' and/or '

这与:

相同
(?:                     # Non matching group
    |                   # Nothing or 
    \s+and/or\s+|       # ' and/or ' or
    \s+opt\s+           # ' opt '
)                       # followed by

然后在每个场景中,您正在寻找以逗号分隔的一个或多个(\w+?\s\d)

(
    (\w+?\s\d)          # a word followed by a single digit
    (?:,\s+             # preceeding comma and at least one space.
        (\w+?\s\d))*    # zero or more word-digit combinations as above,
)*                      # Any number of these

上述link的解释要好得多。