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=捕获的部分的一部分。

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

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

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

我还将您的捕获固定为不情愿(而不是.*,后者是贪婪并消耗其余的全部输入)。

观看现场演示。

相关内容

最新更新