我有以下两行作为示例,它是更大数据集的一部分。该文件是使用垂直条列分隔符限定的引用文本。你有太多引号的例子正在炸毁我的导入。
"BD 3 ML SYRINGE 18GX1-1/2""|"0"|""|"10"|"MISCELLANEOUS"
例如: 18GX1-1/2""|
应该是: 18GX1-1/2"|
"BD 3 ML SYRINGE 25GX1""|"0"|""|"10"|"MISCELLANEOUS"
例如: 25GX1""|
应该是: 25GX1"|
我可以使用带有[\w]""|
但我找不到正确的表达式,只需用一个dbl引号替换重复的双引号,替换原始表达式中找到的所有单词。
提前感谢任何建议!
答案 0 :(得分:1)
我认为你不需要正则表达式来做到这一点。为什么不在""
和find
中向"
输入replace
。我在您的示例输入上尝试了它:
"BD 3 ML SYRINGE 18GX1-1/2""|"0"|""|"10"|"MISCELLANEOUS"
输出:
"BD 3 ML SYRINGE 18GX1-1/2"|"0"|"|"10"|"MISCELLANEOUS"
答案 1 :(得分:1)
我会尝试查找"+([^"|]+)"+
,替换为"\1"
:
捕获"
和|
以外的任何字符序列,其中序列被任意数量的"
包围;用一对引号替换被捕获的组。
通常,模式delimiter(non-delimiters)delimiter
对于分隔文本搜索非常有用。
对于您的测试输入
String 1: "BD 3 ML SYRINGE 18GX1-1/2""|"0"|""|"10"|"MISCELLANEOUS"
becomes: "BD 3 ML SYRINGE 18GX1-1/2"|"0"|""|"10"|"MISCELLANEOUS"
String 2: "BD 3 ML SYRINGE 25GX1""|"0"|""|"10"|"MISCELLANEOUS"
becomes: "BD 3 ML SYRINGE 25GX1"|"0"|""|"10"|"MISCELLANEOUS"
编辑:处理带引号的字符串内的分隔符并转义双引号
虽然在问题中没有提到,但我认为处理分隔符并且可能还在引用的字符串中转义双引号字符可能会很好
搜索模式(^|\|)"+([^"]*)"+(?=\||$)
和替换模式\1"\2"
建立在上面,但在引用的字符串中允许|
String 3: "BD 3 ML SYRINGE 25GX1""|"0"|""|"10"|""MISCELL|ANEOUS""
becomes: "BD 3 ML SYRINGE 25GX1"|"0"|""|"10"|"MISCELL|ANEOUS"
搜索模式(^|\|)"+(([^"\\]|\\.)*)"+(?=\||$)
和替换模式\1"\2"
进一步允许在引用的字符串中使用转义双引号\"
String 4: "6\" Tube""|"0"|""|"10"|""MISCELL|ANEOUS""
becomes: "6\" Tube"|"0"|""|"10"|"MISCELL|ANEOUS"