Regex是一个无序列表,由不同的';分隔符';用python

Regex是一个无序列表,由不同的';分隔符';用python,python,regex,Python,Regex,我试图构造一个正则表达式来捕获与\w{0,}?\s\d{0,}匹配的字符串,即一个单词后跟一个空格,然后是一个数字。我把它做了个模型 仅用逗号分隔的前N个匹配项为组1。 字符串“opt”后的N个匹配项(仅用逗号分隔)为组2 仅用逗号分隔的字符串“和/或”后的N个匹配项为组3 我的尝试是:(\w+?\s\d),\s+(\w+?\s\d))*(\s+和/或\s+(\w+?\s\d))*(\s+opt\s+(\w+?\s\d))* 但我肯定有一些案件我没有想到。我基本上知道这是与订单相关的,我不想这样

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

仅用逗号分隔的前N个匹配项为组1。
字符串“opt”后的N个匹配项(仅用逗号分隔)为组2
仅用逗号分隔的字符串“和/或”后的N个匹配项为组3

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

但我肯定有一些案件我没有想到。我基本上知道这是与订单相关的,我不想这样。

您正在寻找三种不同的场景:

字符串以nothing开头
字符串以'opt'开头
字符串以'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
在上面的解释要好得多

(
    (\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