我有以下格式的字符串:
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=
捕获的部分的一部分。
你非常接近-你正在捕捉它,但在4组中,由于你引入了新的组,使最后一部分可选。
将引入的组更改为非捕获组:
X=(.*?), Y=(.*?)(?:, Z=(.*))?$
我还将您的捕获固定为不情愿(而不是.*
,后者是贪婪并消耗其余的全部输入)。
观看现场演示。