我有一个文档,其中许多行都包含双引号,如下所示:

"foo
bar
"bam"
foo "bar


我想捕获包含双引号的每一行的结尾。
但是我不希望它捕获在末尾已经包含双引号的行。
"foofoo "bar的结尾应该匹配。

我目前正试图使用​​多个正回溯,例如:
(?<=")(?=.*)[^"]$

最佳答案

此正则表达式将仅查找(并替换)其中奇数个"的行:

search_pattern = "(?m)^[^\"\n\r]*\"[^\"\n\r]*(?:\"[^\"\n\r]*\"[^\"\n\r]*)*$";
replace_pattern = "$0\"";
the_string.replaceAll(search_pattern, replace_pattern);


重要的部分是:


(?m)^ / $计数为行的开头/结尾,而不是整个字符串。
[^\"\n\r]*"和非换行符的系列。
(?:\"[^\"\n\r]*\"[^\"\n\r]*)正好两个"字符以及任意数量的非"和非换行符的序列。 (*后缀允许任意数量的"对。)


如果您使用的是Linux或已安装sed,也可以从终端或外壳程序中调用此命令:

sed -r 's/^[^"\n\r]*"[^"\n\r]*("[^"\n\r]*"[^"\n\r]*)*$/\0"/' the_file.txt

关于java - 当行包含双引号时如何捕获行尾?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41403190/

10-12 18:09