RegEx匹配可能存在或不存在的字符串的一部分

时间:2016-01-12 00:42:31

标签: regex

我的字符串格式为:

X=Foo, Y=Bar, Z=Qux

但是,有时只有X=...Y=...部分,而不是Z=...部分,例如:

X=Foo, Y=Bar

还可以在值中捕获逗号,例如:

X=Foo, bar, Y=Bar, Z=Qux

如果存在,我如何编写一个正则表达式来捕获Foo,Bar和Qux(只是这个例子的占位符)?

到目前为止,我已经提出了这个问题:

X=(.*), Y=(.*)           # Works when Z is not present
X=(.*), Y=(.*), Z=(.*)   # Works when Z is present

但是我在编写单个正则表达式以匹配这两种情况时遇到了麻烦。我也试过这样的事情:

X=(.*), Y=(.*)(, Z=(.*))?

我认为通过将,Z=(.*)分组到自己的组中,后跟?,它会将整个组视为可选组,但它似乎仍然将Z=组合为一部分来自Y=的捕获部分。

1 个答案:

答案 0 :(得分:2)

你非常接近 - 你正在捕捉它,但是在 4 组中,由于您引入的新组使最后一部分成为可选项。

将引入的组更改为非捕获组:

X=(.*?), Y=(.*?)(?:, Z=(.*))?$

我还将您的捕获修复为不情愿(而非.*,这是贪婪并消耗其余的所有输入。)

请参阅live demo