【问题标题】:Processing rows with optional separator处理带有可选分隔符的行
【发布时间】:2019-07-24 15:42:09
【问题描述】:

我必须处理具有以下格式的一组行的文件:

{name:value}
  • 名称可以包含:,使用\ 进行转义。
  • : 是可选的,在这种情况下只需要读取名称。
  • 如果: 不存在,则缺少值。该值还可以包含使用\ 转义的}

因此,有效值为:

{john:nice person}
{john} 

我使用了这个正则表达式:

{(?<name>.*?(?=(?<!\\)\:))(?<separator>:?)(?<value>.*?(?=(?<!\\)\}))}

适用于第一种格式,但如果格式为 {name} 没有分隔符和值,则失败。任何想法如何修改正则表达式以读取两种格式?

【问题讨论】:

  • 值是否可以存在,但为空,如{john:}

标签: regex regex-negation


【解决方案1】:

Try\{(?&lt;name&gt;(?:[^:}]|\\:)+)(?:(?&lt;!\\):(?&lt;value&gt;(?:[^}]|\\\})+))?(?&lt;!\\)\}

我将分隔符组合成一个可选组(?:)?

【讨论】:

    【解决方案2】:

    试试这个:

    \{((?:[^\n:]|(?<=\\):)+)(?::((?:[^:\n}]|(?<=\\)})+))?}
    

    live demo

    【讨论】:

      猜你喜欢
      • 2020-09-16
      • 2013-01-13
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      相关资源
      最近更新 更多