我的字符串格式为:
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=
的捕获部分。
答案 0 :(得分:2)
你非常接近 - 你正在捕捉它,但是在 4 组中,由于您引入的新组使最后一部分成为可选项。
将引入的组更改为非捕获组:
X=(.*?), Y=(.*?)(?:, Z=(.*))?$
我还将您的捕获修复为不情愿(而非.*
,这是贪婪并消耗其余的所有输入。)
请参阅live demo。