[英]Regex to match space after opening quotation mark
我寫了一個正則表達式來匹配一行兩邊帶引號的句子:
(?<?")"([^"\r]+)"(?!")
輸入文本:
牌子上寫着“步行”。 然后它說,“不要走路”,然后,“走路”,都在三十秒內完成。 他喊道:“快點。”
第 1 場比賽: “步行”。
比賽2: “別走”
比賽三: “步行”
第四場: “快點。”
現在,我只想在左引號后包含一個空格的匹配項。
我試圖在第一個引號之后在正則表達式中添加(\ {1})
。 現在它看起來像:
(?<?")"((\ {1})[^"\r]+)"(?!")
我的新比賽是:
第 1 場比賽: “然后它說,”
但我希望沒有匹配項,因為在我之前的 4 個匹配項中,引號后沒有一個空格。
現在整個事情都搞砸了,因為它忽略了初始結構並獨立匹配引號,這導致即使在關閉引號后也會查找空格。
知道如何解決這個問題嗎?
謝謝
問題是雙引號是您的開始和結束 delim 字符。
使用 PCRE 正則表達式:
(?<!")"(?!\ )([^"\r]+)"(?!")(*SKIP)(*F)|(?<!")"\ ([^"\r]+)"(?!")
見證明。 (?<?")"(?!\ )([^"\r]+)"(?!")(*SKIP)(*F)
將匹配在初始"
之后沒有空格的雙引號字符串, 並將跳過這些匹配項。 (?<?")"\ ([^"\r]+)"(?!")
將為您獲取預期的匹配項。
“內引號”可以通過使用前瞻來斷言,它要求后面的引號字符總數是偶數:
" [^"]*"(?=(([^"]*"){2})*[^"]*$)
查看現場演示(我在Don't walk
前面添加了一個空格以證明正則表達式確實找到了以空格開頭的引用文本)
請注意,您不需要對空格字符進行轉義, {1}
的量詞可能會被刪除而不影響結果。
如果您的目標是在左引號后恰好有一個空格時獲取連續雙引號之間的文本,您可以匹配以下模式:
(?<=") (?! )[^"\r\n]+(?=")
如果左引號后面的空格不是匹配字符串的一部分,請將正則表達式更改為以下內容。
(?<=" )(?! )[^"\r\n]+(?=")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.