Regex 使用正则表达式删除记事本中CSV文件中的回车符++

Regex 使用正则表达式删除记事本中CSV文件中的回车符++,regex,csv,notepad++,Regex,Csv,Notepad++,我有一个CSV文件需要清理。这是一次性的,所以如果可能的话,我想用记事本++来做 CSV文件有两个字段,其中一个用引号括起来。我想删除引用字段中的任何回车。我试图使用这种模式,但不能完全正确 (.*)\"(.*)\n(.*)\"(.*) 如果我错了,也请纠正我,但我假定替换为值将是以下内容: \1\2\3\4 提前谢谢 我也愿意使用其他解决方案,例如快速而肮脏的PERL脚本。记事本++的问题是,它不允许您运行带有特殊字符(如\n或\t)的正则表达式。正则表达式必须是纯正则表达式,对于特殊字符

我有一个CSV文件需要清理。这是一次性的,所以如果可能的话,我想用记事本++来做

CSV文件有两个字段,其中一个用引号括起来。我想删除引用字段中的任何回车。我试图使用这种模式,但不能完全正确

(.*)\"(.*)\n(.*)\"(.*)
如果我错了,也请纠正我,但我假定替换为值将是以下内容:

\1\2\3\4
提前谢谢


我也愿意使用其他解决方案,例如快速而肮脏的PERL脚本。

记事本++的问题是,它不允许您运行带有特殊字符(如\n或\t)的正则表达式。正则表达式必须是纯正则表达式,对于特殊字符,有扩展搜索模式

如果可能的话,我建议您在Eclipse上运行正则表达式

如果这是不可能的,这里有一个快速而肮脏的解决方案

将所有\n替换为一个特殊字符,例如或&否则将不会出现在文件中

接下来运行正则表达式在引号中查找这个特殊字符并将其删除


最后,将剩余的特殊字符替换为\n

单击π按钮以显示隐藏的字符。 然后选择一个回车字符。 按Ctr+H并替换为空字符串


希望它对你有用。

好吧。。。我的正则表达式很糟糕,我不能回答你的问题。然而,这里有一个很好的小JS函数,您可以使用它来做您想做的事情

function removeNewLines(str){
    var quotedStrings = str.split(/["'](.*)?["']/g),
        i = 0;

    for( ; i < quotedStrings.length; i++){
        str = str.replace(quotedStrings[i], quotedStrings[i].replace(/[\r\n]/g,""));
    }
    return str;
}
removeNewLines("\"asdf\r\nas\"asdf\'as\nd\'asdf\"asdf\r\nasf\r\n\"") === "\"asdfas\"asdf'asd'asdf\"asdfasf\"";

在对StackOverflow进行了大量研究之后,我发现了一个建议用于类似问题的正则表达式模式,我只需从单引号稍微修改为双引号。我用PERL运行了它。它工作得很好!不幸的是,我找不到原来的帖子,在该表扬的地方给予表扬

不管怎样,这就是我最后使用的。谢谢大家的帮助

$string123 =~ s/((?:^[^"]*"|(?!^))[^"]*?(?:"[^"]*"[^"]*?)*?)(\n{1,})/$1/g; 

下面是一个专门针对记事本的答案++

菜单:TextFX>TextFX编辑>删除空行


在这个菜单项中还有一个删除多余的空行选项。

Barry有这个解决方案,而且它似乎是我在任何地方都能找到的最好的解决方案,我仔细看了一下,因为我发现,一开始,这个解决方案在Perl中对我不起作用。

我发现,对regex进行一点调整就行了。我不确定这种细微差别的原因,但Perl在查找时无法找到回车符,\n但找到了以十六进制形式/x0D表示的回车符。

$string123=~s/?:^[^]|^[^]??:[^][^]??\n{1,}/$1/g

这对我很有用:


$string123=~s/?:^[^]|^[^]:[^][^]??\x0D{1,}/$1/g

谢谢巴里,帮了大忙

如果其他人发现了这一点,并希望在记事本++中找到此问题的真正合法答案,请考虑:

使用段落符号/显示不可见字符命令显示CR和LF

现在,请注意,每个csv记录末尾的真正换行通常取决于创建文件的内容(仅限LFs)。实际记录分隔符中没有CR。现在请注意,嵌入在字段中并用引号括起来的回车通常是CR/LFs,两个非打印字符并排,一个CR和一个LF

所以现在,这很容易。突出显示CRLF组合,拉起f&r,您的“查找内容:”条目应该是两个空框,用于不可打印的CRLF组合。将replace字段保留为空,然后运行它


塔达!引号中不再有嵌入的回车符,所有的实线提要都保持不变。

我遇到了这个问题,并使用记事本++取得了成功。Shreyas的答案可能是错误的或过时的,因为现在在regexp搜索和替换中使用\r\n会起作用。也就是说,我使用了以下方法:

[^"]"(([^"]*)\r\n([^"]*))+"
它的工作方式是匹配:

[somethin0]"[somethin1]NEWLINE[somethin2]"
其中somethin1和somethin2分别为\2和\3,\1是整个内部部分,somethin0很可能是分隔字符逗号。为了得到我们想要的,我们用以下替代:

[somethin0]"\2 \3"

并取得了预期的效果!嗯,主要是。单替换类似于删除引号中的单换行符。然而,这应该只是几次滥发replaceAll按钮的一个小麻烦,其中几次是引号之间出现的换行符的最大数量

我只想替换引号内的回车符,这将替换所有。快速和肮脏的方法是正确的。>用一个特殊字符替换所有\n例如,或&将不会出现在您的文件中,否则这将使CSV文件成为一行,因为所有新行都被一个特殊字符替换。到目前为止一切顺利。>接下来运行正则表达式在引号中查找这个特殊字符并将其删除。这将删除文件中的所有内容。不好的。我猜我的正则表达式现在需要修改以处理单行输入字符串。。。