我有一个文档,其中许多行都包含双引号,如下所示:
"foo
bar
"bam"
foo "bar
我想捕获包含双引号的每一行的结尾。
但是我不希望它捕获在末尾已经包含双引号的行。
"foo
和foo "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/