[英]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.