当行包含双引号时如何捕获行尾?

时间:2016-12-30 22:00:33

标签: java regex

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

"foo
bar
"bam"
foo "bar

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

我目前无法尝试使用多个这样的正面回顾: (?<=")(?=.*)[^"]$

3 个答案:

答案 0 :(得分:2)

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

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,您也可以从终端或shell中调用它:

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

答案 1 :(得分:0)

使用notepad ++或sublime:

之类的东西插入缺少的双引号
Find: (?m)^".*[^"]$
Replace: \0"

注意没有组 - 整个比赛都会被放回。

答案 2 :(得分:-1)

我无法理解end of line你是什么意思,但这是一个正在运行的正则表达式,捕获包含双引号但不在末尾的行:{{1} }

您可以在此处尝试:http://rubular.com/r/ppKo7E3qDP