2016-12-30 100 views
1

我有一個文件,其中無數條線包含這樣的雙引號:如何在行包含雙引號時捕獲行尾?

"foo 
bar 
"bam" 
foo "bar 

,我要拍攝包含雙引號每一行的末尾。 但我不希望它捕捉到最後包含雙引號的行。 剛剛結束的"foofoo "bar應該匹配。

我目前卡住嘗試使用多重利好的回溯期是這樣的: (?<=")(?=.*)[^"]$

+0

您仍然可以使用'^「。* [^」] $' - 請參閱[此演示](https://regex101.com/r/uNpuDB/2)。 'replaceAll(「(?m)^ \」。* [^ \「] $」,「$ 0 \」「)'。我只是想知道你將如何處理''foo'bar' –

+0

@RadLexus我改變了它 – Busti

+0

@WiktorStribiżew這個捕獲了整條線,我只希望捕獲它的末尾,因爲我想追加缺少的雙引號 – Busti

回答

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 
+0

這將工作,如果我有權訪問替換模式。可悲的是我沒有。我也經歷了約。同時手動輸入1.2k行。 儘管感謝您的答覆。 – Busti

+0

接受爲最準確的答案,即使超出了實際問題的範圍。請記住,它並不能完全解決問題。 – Busti

0

插入缺少使用類似記事本++或昇華雙引號:

Find: (?m)^".*[^"]$ 
Replace: \0" 

注缺乏羣體 - 整場比賽被放回。

+0

我的文本編輯器不支持替換正則表達式。我當然可以編寫一個Java程序來完成這項工作,但是由於我已經完成了手動完成工作,我只是想出於好奇而找到一個解決方案。 – Busti

+0

下載和使用(免費)記事本++或崇高和你的生活會更容易 – Bohemian

-1

我不明白你是什麼意思end of line但這裏是一個工作的正則表達式捕捉其中包含雙引號,但不是在最後行:^.*(?:").*[^"]$

你可以在這裏試試這個:http://rubular.com/r/ppKo7E3qDP

相關問題