正则表达式:组或组

Regex: Group OR Group

我收到一个文本文件,以横线分隔,其中一个字段应该包含城市逗号状态。一个例子:

|Boston, MA|

在我的应用程序中,我需要将城市和州捕获为两个不同的字段。这是处理整行的较大正则表达式的一部分,但处理此字段的部分是:

\|(.+),(.+[^|]+)\|

这会将逗号前的文本捕获到一组,将逗号后的文本捕获到另一组。当字段按预期填写时效果很好。

我的问题是,有时这个字段会出现:

或 - 没有逗号的文本 (|unknown|)

我需要修改这个正则表达式,以便:

使用这个正则表达式你应该得到你所期望的:

\|\s*([^,|]*?)\s*(?:,\s*([^|]*?)\s*)?\|

它填满了第 1 组和第 2 组。 如果没有逗号,你会得到一个空组 2。 如果条形之间没有值(或白色 space),则会得到两个空组。

如果您希望白色 space 成为匹配项的一部分,则正则表达式将如下所示:

\|([^,|]*)(?:,([^|]*))?\|