需要正则表达式帮助清理分隔数据

Need regex help to clean up delimited data

我有一些竖线分隔的数据,如下所示:

    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

有人知道是否有使用正则表达式执行此操作的简单方法吗?

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

使用 PCRE:

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

Regex #1 Test
Regex #2 Test (Stage 1)
Regex #2 Test (Stage 2)

My attempt at translating this to PERL