需要正则表达式帮助清理分隔数据
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:
- 读入一行输入字符串。
- 在与
"[^"]*"(*SKIP)(*F)|\|
的任何匹配处拆分行以获得字段列表。
- 对于每个字段:
- 如果它包含与
(?<!^)"(?!$)
的匹配项,请用引号将字段括起来。
- 之后,将
(?<!^)"(?!$)
的每个匹配项替换为 ""
。
- 重新加入字段列表并将其输出为新 CSV 的一行。
- 返回步骤 #1,直到处理完所有行。
Regex #1 Test
Regex #2 Test (Stage 1)
Regex #2 Test (Stage 2)
我有一些竖线分隔的数据,如下所示:
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:
- 读入一行输入字符串。
- 在与
"[^"]*"(*SKIP)(*F)|\|
的任何匹配处拆分行以获得字段列表。 - 对于每个字段:
- 如果它包含与
(?<!^)"(?!$)
的匹配项,请用引号将字段括起来。 - 之后,将
(?<!^)"(?!$)
的每个匹配项替换为""
。
- 如果它包含与
- 重新加入字段列表并将其输出为新 CSV 的一行。
- 返回步骤 #1,直到处理完所有行。
Regex #1 Test
Regex #2 Test (Stage 1)
Regex #2 Test (Stage 2)