我有一个文档,其中许多行包含双引号,如下所示:
"foo
bar
"bam"
foo "bar
我想捕捉包含双引号的每一行的结尾。
但我不希望它捕获最后已包含双引号的行。
"foo
和foo "bar
的结尾应该匹配。
我目前无法尝试使用多个这样的正面回顾:
(?<=")(?=.*)[^"]$
答案 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