gpt4 book ai didi

c# - 匹配除分隔符之间的任何换行符

转载 作者:行者123 更新时间:2023-11-30 23:23:33 27 4
gpt4 key购买 nike

我提供了以下 CSV 文件:

"A";"B
C";"D"
"E";"F"
"G
H"

而且我需要去掉文本中的换行符,除了直接放在两个定界符之间的换行符(在这种情况下是双引号 "")。仅表示换行符,即两个双引号 ("\n") 之间的唯一符号应该出现在文件中。

这个想法是有一个正则表达式,它将:

查找所有新行字符,双引号之间的字符除外(行尾的字符除外,因为每行始终以双引号开头和结尾)并将它们替换为空间。

那么处理上述文件的结果应该是:

"A";"B C";"D"
"E";"F"
"G H"

换句话说,正则表达式在定界符之间查找新行字符应该:

查找所有\n,除了"\n"

我尝试了以下正则表达式:[^"\n"][\n] 来匹配每个 \n 除了 "\n",但在 Sublime Text 2 中测试它会选择想要的换行符,但也会选择它之前的单个字符:

enter image description here

这意味着当我用空格替换那些找到的地方时,它也会替换 BG 字符,这不是预期的。

我还想提一下,我将使用该 Regex 在 C# 代码中执行替换操作。

你知道如何让这个按照我的意愿工作吗?

编辑 2016-07-14:

我尝试了下面 OmegaMan 提出的建议。它适用于我上面指定的情况,但我没有发现它可能在文件中出现多行。示例:

给定的 CSV 文件(稍后在 C# 代码中称为“pathToTheExampleFile”):

"A";"B
C";"D"
"E";"F";"Part1
Part2
Part3
";

在代码中使用 OmegaMan 的解决方案,我得到了这个结果:

"A";"B C";"D"
"E";"F";"Part1 Part2
Part3
";

而预期是:

"A";"B C";"D"
"E";"F";"Part1 Part2 Part3 ";

但是,执行了3次OmegaMan的Replace操作后,就这样了:

string data = File.ReadAllText(@"pathToTheExampleFile");

string pattern = @"(?<=\x22[^\x22\r\n]+)([\r\n]+)";

var result = Regex.Replace(data, pattern, " ");

result = Regex.Replace(result, pattern, " ");

result = Regex.Replace(result, pattern, " ");

Console.WriteLine(result);

我得到了我想要的结果。所以它是多行匹配所需要的。我没有看到正则表达式可能不起作用的任何其他情况。

如果您知道如何修改正则表达式,我们将不胜感激。

编辑 2016-07-15:

我必须补充一点,添加这个丑陋的解决方案是可行的:

while (Regex.IsMatch(data, pattern))
{
data = Regex.Replace(data, pattern, " ");
}

最后,data 包含预期的字符串。它非常丑陋,但我确信它可以通过正则表达式以某种方式实现。

最佳答案

您可以使用基于 lookahead 的正则表达式来搜索:

\n(?!")

并将其替换为:

" "

\n(?!") 将匹配任何未跟双引号的 \n

RegEx Demo

关于c# - 匹配除分隔符之间的任何换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38308981/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com