我有一個文件,其中無數條線包含這樣的雙引號:如何在行包含雙引號時捕獲行尾?
"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