正则表达式仅匹配引号内的空格

时间:2017-04-18 22:16:17

标签: c# regex visual-studio

我需要匹配双引号内的任何空格 - 不在外面。我尝试了一些事情,但没有一个能奏效。

  • [^"]\s[^"] - 匹配引号之外的空格
  • [^"] [^"] - 见上文
  • \s+ - 见上文

例如,我想匹配" hello world"但不是" helloworld"而不是你好世界(没有引号)。我将通过“查找”功能专门在Visual Studio中使用此正则表达式。

1 个答案:

答案 0 :(得分:0)

使用.net和pcre正则表达式引擎,您可以使用匹配成功匹配后的位置的\G功能或字符串的开头来构建一个从字符串开头返回连续出现的模式:

((?:\G(?!\A)|\A[^"]*")[^\s"]*)\s([^\s"]*"[^"]*")?

替换为#:demo

的示例

模式细节:

( # capture group 1
    (?: # two possible beginning
        \G(?!\A) # contiguous to a previous match
      |          # OR
        \A[^"]*" # start of the string and reach the first quote
    )   # at this point you are sure to be inside quotes    
    [^\s"]* # all that isn't a white-space or a quote
)
\s # the white-space
([^\s"]*"[^"]*")? # optional capture group 2: useful for the last quoted white-space
                  # since it reaches an eventual next quoted part. 

注意:使用.net正则表达式引擎,您还可以使用lookbehind来测试空格前的引号数是偶数还是奇数,但这种方式效率不高。 (同样的事情是前瞻性检查剩余的引用直到结束,但另外如果引号不平衡,这种方法可能是错误的。)