除非換行符後面的字符是公開報價,否則我想在換行符之前找到沒有匹配的近似報價(「)的開放報價(」)。例如:正則表達式找到缺少近似報價的段落
He said, 「bla bla bla
She didn't listen.
上面應該找到「唧唧歪歪
然而,接下來的例子應該不匹配,因爲下一行有公開報價開始:
He said, 「bla bla bla
「bla bla bla.」
僅供參考,我正在使用C#Regex類。提前致謝。
除非換行符後面的字符是公開報價,否則我想在換行符之前找到沒有匹配的近似報價(「)的開放報價(」)。例如:正則表達式找到缺少近似報價的段落
He said, 「bla bla bla
She didn't listen.
上面應該找到「唧唧歪歪
然而,接下來的例子應該不匹配,因爲下一行有公開報價開始:
He said, 「bla bla bla
「bla bla bla.」
僅供參考,我正在使用C#Regex類。提前致謝。
「(?>[^\r\n「」]*)(?!\r?\n「)(?!」)
將匹配從開口報價文本到行的結束,除非有一個閉引號在中間或下一行具有開口報價開始。
假設你的目標是解決這些線,即插入結束報價在必要時
result = Regex.Replace(subject,
@"「 # Match an opening quote
(?> # Match in an atomic group (no backtracking!):
[^\r\n「」]* # any characters except newlines or quotes
) # End of atomic group
(?!\r?\n「) # Assert that no linebreak, followed by an opening quote, follows
(?!」) # Assert that no closing quote follows",
"$0」", RegexOptions.IgnorePatternWhitespace);
將這樣做。
請問這樣的工作嗎?
"[^"]*\n[^"]
請考慮下面的通用正則表達式的powershell示例。
("[^"\n]*)("|\n(?!"))
$Matches = @()
$String = '"bla bla bla
She didn''t listen.
He said, "bla bla bla
"bla bla bla."'
Write-Host start with
write-host $String
Write-Host
Write-Host found
([regex]'("[^"\n]*)("|\n(?!"))').matches($String) | foreach {
write-host "key at $($_.Groups[1].Index) = '$($_.Groups[1].Value)'"
} # next match
息率
start with
"bla bla bla
She didn't listen.
He said, "bla bla bla
"bla bla bla."
found
key at 0 = '"bla bla bla
'
key at 57 = '"bla bla bla.'
摘要
("[^"\n]*)
返回所有非」,\ n個字符從打開雙引號("|\n(?!"))
停止時遇到的第一個」,或\ n(?!")
確保\ N線後面沒有之前它由一個雙引號我似乎無法擺脫回報在第一場比賽中換行符的情況下,這可能更容易使用「裁減」語句。
謝謝!但是,這並不完全正確。我不想在「57鍵」找到。 - 第一場比賽的換行符是可以的,所以不要擔心。 – 2013-05-01 22:46:55
謝謝!我將此標記爲答案,儘管我必須在第二次出現\ r \ n時添加[和],因爲顯然我並不總是都有。所以:「(?> [^ \ r \ n」「] *)(?![\ r \ n]」)(?!「) – 2013-05-01 23:01:32
@DanThomas:在這種情況下,我認爲'\ r?\ n'更健壯。我編輯了我的答案。 – 2013-05-02 05:18:40
很明顯,我對正則表達式很陌生。爲什麼它更強大? – 2013-05-02 14:33:11