【问题标题】:Regex: Group OR Group正则表达式:组或组
【发布时间】:2017-10-30 12:51:43
【问题描述】:

我有一个以条形分隔的文本文件进来,其中一个字段应该包含城市逗号状态。一个例子:

|Boston, MA|

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

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

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

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

  • 栏之间没有信息 (||)

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

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

  • 如果条之间没有信息,我仍然会得到 2 组空白值

  • 如果存在不带逗号的文本字符串,则该字符串被捕获为第一组,而第二组被捕获为空白值

【问题讨论】:

    标签: regex state comma regex-group city


    【解决方案1】:

    有了这个正则表达式,你应该得到你所期望的:

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

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

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

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

    【讨论】:

    • 这是根据OP要求的正确答案。您可以从第一个表达式中删除惰性量词,但是 \|\s*([^,|]*)\s*(?:,\s*([^|]*)\s*)?\|
    • 谢谢。如果没有惰性限定符,您可能会在组值的末尾获得空格。就像在|Boston, MA | 中一样,第二组将是“MA”(末尾的空格)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 2012-01-23
    • 2021-09-27
    相关资源
    最近更新 更多