我有一个文件,其中无数条线包含这样的双引号:如何在行包含双引号时捕获行尾?
"foo
bar
"bam"
foo "bar
,我要拍摄包含双引号每一行的末尾。 但我不希望它捕捉到最后包含双引号的行。 刚刚结束的"foo
和foo "bar
应该匹配。
我目前卡住尝试使用多重利好的回溯期是这样的: (?<=")(?=.*)[^"]$
我有一个文件,其中无数条线包含这样的双引号:如何在行包含双引号时捕获行尾?
"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则安装,你也可以从终端或shell称之为:
sed -r 's/^[^"\n\r]*"[^"\n\r]*("[^"\n\r]*"[^"\n\r]*)*$/\0"/' the_file.txt
我不明白你是什么意思end of line
但这里是一个工作的正则表达式捕捉其中包含双引号,但不是在最后行:^.*(?:").*[^"]$
你可以在这里试试这个:http://rubular.com/r/ppKo7E3qDP
您仍然可以使用'^“。* [^”] $' - 请参阅[此演示](https://regex101.com/r/uNpuDB/2)。 'replaceAll(“(?m)^ \”。* [^ \“] $”,“$ 0 \”“)'。我只是想知道你将如何处理''foo'bar' –
@RadLexus我改变了它 – Busti
@WiktorStribiżew这个捕获了整条线,我只希望捕获它的末尾,因为我想追加缺少的双引号 – Busti