我需要匹配双引号内的任何空格 - 不在外面。我尝试了一些事情,但没有一个能奏效。
[^"]\s[^"]
- 匹配引号之外的空格[^"] [^"]
- 见上文\s+
- 见上文例如,我想匹配" hello world"但不是" helloworld"而不是你好世界(没有引号)。我将通过“查找”功能专门在Visual Studio中使用此正则表达式。
答案 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来测试空格前的引号数是偶数还是奇数,但这种方式效率不高。 (同样的事情是前瞻性检查剩余的引用直到结束,但另外如果引号不平衡,这种方法可能是错误的。)