使用c#regex我试图匹配引号中的东西,这些引号也不在括号中,同时也忽略任何空格:
"blah" - match
("blah") - no match
( "blah") - no match
( "blah") - no match
我有(未转义):
"(?<=[^(]\s")(.*?)"
与前三个一起工作,但我无法弄清楚如何处理第一个括号和引号之间的多个空格。在s之后使用+是相同的结果,使用*表示最后两个匹配。有什么想法吗?
答案 0 :(得分:3)
这应该有效:
/(?<![^(\s])\s*"([^"]*)"\s*(?![\s)])/
第一个(?<![^(\s])
断言字符串前面没有空格或左括号。
然后\s*
将匹配任意数量的空白字符。
("[^"]*")
将匹配带引号的字符串,并捕获其内容。
\s*
将匹配任意数量的空白字符。
最后,(?![\s)])
将声明后面没有空格或右括号。
他们一起确保每个\s*
匹配所有空格,并且它们不与括号相邻。
答案 1 :(得分:1)
在我知道的PCRE中,lookbehinds必须是固定宽度的。如果在C#的PCRE引擎中仍然如此,那么你就无法按照自己的方式去做。
答案 2 :(得分:1)
看后面需要一个固定的宽度,但你可以用下面的表达式到达那里。这假定没有嵌套。
/\G # from the spot of the last match
(?: # GROUP OF:
[^("]* # anything but open-paren and double quote.
[(] # an open-paren
[^)]* # anything but closing-paren
[)] # a closing-paren
)* # any number of times
[^"]* # anything but double quote
"([^"]*)" # quote, sequence of anything except quote, then ending quote
/x