我需要这种输入的正则表达式:
AB: EF
AB : EF
AB (CD): EF
AB (CD) XY: EF
我需要3组。一个用于AB,第二个用于CD(如果没有,则可以为空),第三个用于EF。
我如何编写这样的正则表达式?
我试过了:
(.*)?\s(\(.*\))\s?(.*)?:\s(.*) --- AB: EF doesn't match
(.*)?\s?(\(.*\))\s?(.*)?:\s(.*) --- AB (CD): EF has the second group is empty
答案 0 :(得分:2)
(\w+) ?(?:\(?(\w{2})\)?.*)?: (\w*)
这正是您所需要的。证明:https://regex101.com/r/1TlGy9/1
正如你所说,你需要3组,我认为你只是想把'XY'部分作为可选项换句话说:你不想匹配它,但你希望其他组匹配,即使它存在
答案 1 :(得分:2)
这适用于大多数正则表达式引擎,see here
(\w{2}):? *(\((\w{2})\))?.*?: *(\w{2})
如果您只想要数字,请将\w
替换为\d
。
第1组匹配AB
,第3组匹配CD
,第4组匹配EF
。
(\w{2})
匹配AB
,任意两个字母数字字符。:? *
匹配可选的:
,后跟任意数量的空格。(\((\w{2})\))?
匹配括号内的可选CD
,任意两个字母数字字符。.*?:
匹配任何字符,直到下一个:
。*
匹配:
之后的任意数量的空格。(\w{2})
匹配EF
,任意两个字母数字字符。答案 2 :(得分:0)
这个怎么样:
\w*\s?(\(.*\))?\s?\w*:\s?\w*
这也可以应用。
由于