1

我有一些用管道分隔的数据,如下所示:

    field|field|field|field|another "field"|field
    field|field|field|"another" field|field|field
    field|"fie|ld"|field|field|field|field

我遇到的问题是双引号没有为分隔字段正确形成(包含分隔符或引号的字段本身应该用双引号括起来,并且双引号应该被排除加上另一个双引号)。这就是输出应该是什么:

    field|field|field|field|"another ""field"""|field
    field|field|field|"""another"" field"|field|field
    field|"fie|ld"|field|field|field|field

任何人都知道是否有一种简单的方法可以使用正则表达式来做到这一点?

4

1 回答 1

1

此操作中只有部分适用于正则表达式。其他部分更适合常规程序流程。正则表达式仍然可以作为操作的一个组成部分,但在可能的情况下使用内置的字符串操作。

使用 PCRE:

  1. 读入输入字符串的一行。
  2. 在任何匹配处拆分行"[^"]*"(*SKIP)(*F)|\|以获取字段列表。
  3. 对于每个字段:
    1. 如果它包含与 的匹配项(?<!^)"(?!$),请将该字段括在引号中。
    2. 之后,将每个匹配替换(?<!^)"(?!$)""
  4. 重新加入字段列表并将其作为新 CSV 的一行输出。
  5. 返回步骤#1,直到所有行都已处理完毕。

正则表达式 #1 测试
正则表达式 #2 测试(阶段 1)
正则表达式 #2 测试(阶段 2)

我尝试将其翻译成 PERL

于 2016-06-13T21:32:06.187 回答