正则表达式在左引号后匹配 space
Regex to match space after opening quotation mark
我写了一个正则表达式来在一行中匹配两边带引号的句子:
(?<!")"([^"\r]+)"(?!")
输入文字:
牌子说,"Walk." 然后它说,"Don't Walk",然后,"Walk",都在三十秒内。他喊道,"Hurry up."
匹配 1: "Walk."
匹配 2: "Don't Walk"
第 3 场:"Walk"
第 4 场比赛: "Hurry up."
现在,我只想在左引号后包含一个 space 的匹配项。
我试图在第一个引号后的正则表达式中添加 (\ {1})
。
现在它看起来像:
(?<!")"((\ {1})[^"\r]+)"(?!")
我的新比赛是:
匹配 1:“然后它说,”
但我预计 没有匹配项 因为在我之前的 4 个匹配项中,引号后没有单个 space。
现在整个事情都搞砸了,因为它忽略了初始结构并独立匹配引号,这导致即使在关闭引号后也会查找 spaces。
知道如何解决这个问题吗?
谢谢
问题是双引号是您的开始和结束 delim 字符。
使用 PCRE 正则表达式:
(?<!")"(?!\ )([^"\r]+)"(?!")(*SKIP)(*F)|(?<!")"\ ([^"\r]+)"(?!")
参见proof。 (?<!")"(?!\ )([^"\r]+)"(?!")(*SKIP)(*F)
将匹配在初始 "
之后没有 space 的双引号字符串,并将跳过这些匹配。 (?<!")"\ ([^"\r]+)"(?!")
将为您获取预期的匹配项。
“内部引号”可以通过使用前瞻来断言,它要求后面的引号字符总数为 even:
" [^"]*"(?=(([^"]*"){2})*[^"]*$)
参见 live demo(我在 Don't walk
前面添加了 space 以证明正则表达式确实找到了以 space 开头的引用文本)
请注意,您不需要对 space 字符进行转义,并且可以删除 {1}
的量词而不影响结果。
如果您的 objective 是在左引号后恰好有一个 space 时获取连续双引号之间的文本,您可以匹配模式:
(?<=") (?! )[^"\r\n]+(?=")
如果开头引号后面的 space 不是匹配字符串的一部分,请将正则表达式更改为以下内容。
(?<=" )(?! )[^"\r\n]+(?=")
我写了一个正则表达式来在一行中匹配两边带引号的句子:
(?<!")"([^"\r]+)"(?!")
输入文字:
牌子说,"Walk." 然后它说,"Don't Walk",然后,"Walk",都在三十秒内。他喊道,"Hurry up."
匹配 1: "Walk."
匹配 2: "Don't Walk"
第 3 场:"Walk"
第 4 场比赛: "Hurry up."
现在,我只想在左引号后包含一个 space 的匹配项。
我试图在第一个引号后的正则表达式中添加 (\ {1})
。
现在它看起来像:
(?<!")"((\ {1})[^"\r]+)"(?!")
我的新比赛是:
匹配 1:“然后它说,”
但我预计 没有匹配项 因为在我之前的 4 个匹配项中,引号后没有单个 space。
现在整个事情都搞砸了,因为它忽略了初始结构并独立匹配引号,这导致即使在关闭引号后也会查找 spaces。
知道如何解决这个问题吗?
谢谢
问题是双引号是您的开始和结束 delim 字符。
使用 PCRE 正则表达式:
(?<!")"(?!\ )([^"\r]+)"(?!")(*SKIP)(*F)|(?<!")"\ ([^"\r]+)"(?!")
参见proof。 (?<!")"(?!\ )([^"\r]+)"(?!")(*SKIP)(*F)
将匹配在初始 "
之后没有 space 的双引号字符串,并将跳过这些匹配。 (?<!")"\ ([^"\r]+)"(?!")
将为您获取预期的匹配项。
“内部引号”可以通过使用前瞻来断言,它要求后面的引号字符总数为 even:
" [^"]*"(?=(([^"]*"){2})*[^"]*$)
参见 live demo(我在 Don't walk
前面添加了 space 以证明正则表达式确实找到了以 space 开头的引用文本)
请注意,您不需要对 space 字符进行转义,并且可以删除 {1}
的量词而不影响结果。
如果您的 objective 是在左引号后恰好有一个 space 时获取连续双引号之间的文本,您可以匹配模式:
(?<=") (?! )[^"\r\n]+(?=")
如果开头引号后面的 space 不是匹配字符串的一部分,请将正则表达式更改为以下内容。
(?<=" )(?! )[^"\r\n]+(?=")