正则表达式 - 可选括号

时间:2016-11-12 15:09:31

标签: regex

我需要这种输入的正则表达式:

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

3 个答案:

答案 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*

这也可以应用。

由于