【问题标题】:Regex matching line with single " at the end正则表达式匹配行,末尾带有单个“
【发布时间】:2018-05-23 17:43:54
【问题描述】:

我有一个 csv,其中所有字段都用“”括起来。偶尔会出现格式错误的表格行

字段1、字段2、字段3、字段4"

具有可变数量的字段。我需要删除这些特定的行,避免表单的所有行

"字段1","字段2","字段3","字段4"

【问题讨论】:

  • 这应该匹配末尾的单引号/^[^"]*"$/
  • 谢谢。我实际上也刚刚找到它。如果您发布答案,我会接受您的。
  • 不需要,您可以接受自己的答案。但是,请考虑在记录中是否可以接受单个"。您可能需要将 + 更改为 *...

标签: regex csv sed regex-negation


【解决方案1】:

您可以查找以下正则表达式来匹配您的行

^[^"]*"$

Demo

这将查找并匹配所有字符,并匹配行尾的"。

如果第一个"不在行尾,则该行将不匹配。

【讨论】:

    【解决方案2】:

    如果字段内容不包含转义引号,可以测试
    报价均匀度线。

    如果匹配,则删除该行:

    ^(?![^"]*(?:"[^"]*"[^"]*)*$).+$

    这也可以适应转义引号。
    需要更复杂的正则表达式。

    【讨论】:

      【解决方案3】:

      这可能对你有用(GNU sed):

       sed '/^\([^"]*\("[^"]*"\)*\)*$/!d' file
      

      删除该行,除非它包含零对或多对双引号。

      【讨论】:

        【解决方案4】:

        找到答案了。

        使用扩展正则表达式:

        '/^[^"]+"$/'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-01
          • 1970-01-01
          • 2016-12-22
          • 2021-06-22
          • 1970-01-01
          • 2019-12-18
          相关资源
          最近更新 更多