【发布时间】:2019-07-02 15:00:38
【问题描述】:
我正在尝试用空格替换引号内的管道分隔字符。问题是我得到了很多误报,因为有些字符串是空的。如果引号之间有文本,我只想替换管道。我使用的正则表达式模式来自另一个 stackoverflow 帖子,因为我缺乏正则表达式技能。
数据样本:
"Hello"|"Green | Blue"|123.45|""|""|""|5|45
代码我正在使用:
internal class Program
{
public static void Main()
{
string pattern = @"(?: (?<= "")|\G(?!^))(\s*[^"" |\s]+(?:\s +[^
""|\s]+)*)\s*\|\s*(?=[^""] * "")";
string substitution = @"\1 \2";
string input = @"""20190430|""Test Text""|""""|""""|""Manual""|""""|""Machine""|""""|""""|10.00|""""|0.00|||0.00||5600.00||||""A+""|""""|40.00||""""|""Vision Service |Troubleshoot""|57|""Y""|838|""Yellow Maroon""|850||""FL""||||0.00|||||||||||""""||""""||""""|||""""||||||""""||""""|""""||""""|""""||||||""""|""""|""""||||||||1||""";
RegexOptions options = RegexOptions.Multiline;
Regex regex = new Regex(pattern, options);
string result = regex.Replace(input, substitution);
Console.WriteLine("Result:" + result);
Console.ReadKey();
}
}
它可以很好地替换“蓝绿色”管道。但它也会替换引号之间的管道,这会在列被删除时破坏文件。
使用我正在处理的文件的实际示例更新了代码。正则表达式找到它但不替换管道。缺少一些东西。
【问题讨论】:
-
这与替换双引号外的逗号相同的解决方案。请参阅:stackoverflow.com/questions/3147836/…
-
还要明确一点,最终输出应如下所示:"Hello"|"Green Blue"|123.45|""|""|""|5|45