【问题标题】:Regex Partial String CSV Matching正则表达式部分字符串 CSV 匹配
【发布时间】:2010-09-15 22:08:02
【问题描述】:

让我先说我在 RegEx 方面完全是个业余爱好者,而且几天前才开始。我正在尝试解决格式化文件的问题,并且遇到了与特定类型的数据有关的问题。输入文件的结构如下:

两个字,Word,Word,Word,"数字,数字"

我需要做的是像这样格式化它......

“两个字”、“字”、“字”、“字”、“数、数”

我有一个正则表达式模式

s/,/","/g

工作,除了它还替换了已经引用的 Number, number 部分中的逗号,这会导致字段分隔并破坏文件。本质上,我需要修改我的模式以用 "," [quote comma quote] 替换逗号,但前提是该逗号后面没有空格。请注意,其他字段在逗号后面永远不会有空格,只有分隔的数字列表。

我写好了

s/,[A-Za-z0-9]/","/g

在匹配适当的字符串时,将替换逗号和以下字母。我听说过反向引用并认为这可能是我需要使用的?我的理解是

s/(,)[A-Za-z0-9]\b

应该可以,但是不行。

有人有想法吗?

【问题讨论】:

    标签: regex csv


    【解决方案1】:

    看起来你正在使用 Sed。

    虽然您的模式似乎有点不一致,但我假设您希望用逗号分隔的每个项目都有引号。否则,您将看到计算复杂性正则表达式无法处理的领域。

    通过 sed,您的命令将是:

      sed 's/[ \"]*,[ \"]*/\", \"/g'
    

    请注意,您仍然必须在字符串的开头和结尾加上双引号。

    【讨论】:

      【解决方案2】:

      这个问题类似于:Replace patterns that are inside delimiters using a regular expression call。

      这可行:

      s/"([^"]*)"|([^",]+)/"$1$2"/g
      

      【讨论】:

      • 嘿,这完成了 Isaac 想要的,而不是他要求的 :) 你可以更花哨一点,也可以处理 CSV 的引号转义...但是用正则表达式处理它没有多大意义什么时候预建的 CSV 解析器可以做得更好。
      • 我这样做的主要原因有两个。一,我想学习Perl,然后RegEx似乎可以解决这个问题。其次,我会定期收到这些文件,并且能够针对它们运行脚本为我节省了大量时间。
      【解决方案3】:

      我的经验是,这不是正则表达式的好用处。如前所述,真正的 CSV 解析器可以更好地处理 CSV 文件。你没有标记语言,所以很难说,但在 perl 中,我使用 Text::CSV_XS 或 DBD::CSV (允许我 SQL 访问 CSV 文件,就像它是一个表一样,当然,在封面下使用 Text::CSV_XS)。比滚动我自己的要简单得多,也比使用正则表达式要强大得多。

      【讨论】:

        【解决方案4】:

        s/,([^ ])/","$1/ 将匹配“,”后跟“not-a-space”,捕获 not-a-space,然后用捕获的部分替换整个内容。

        根据您使用的正则表达式引擎,您可能会写 \1 或其他内容,而不是 $1。

        如果您使用 Perl 或以其他方式访问带有负前瞻的正则表达式引擎,s/,(?! )/","/(“,”后面不跟空格)有效。

        不过,您的输入看起来像 CSV,如果确实如此,您最好使用真正的 CSV 解析器而不是正则表达式来解析它。还有很多其他奇怪的极端情况需要担心。

        【讨论】:

        • 我想通过 CSV 解析器来完成,但我得到的是这些文件,而我对实际格式没有任何发言权。所以我一直在摆弄 RegEx。
        • s/,(?!)/","/ 工作得很好,谢谢。我正在使用 Perl,因此我可以在发送文件时针对这些文件运行脚本。保存在解析器中打开它并在那里使用它。此外,我还是想学习 Perl 和 RegEx,所以一石二鸟。感谢您的帮助:)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-25
        • 2015-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多