负面看后面有未知数量的空格

时间:2009-04-27 21:15:09

标签: c# regex

使用c#regex我试图匹配引号中的东西,这些引号也不在括号中,同时也忽略任何空格:

"blah" - match
("blah") - no match
( "blah") - no match
(  "blah") - no match

我有(未转义):

"(?<=[^(]\s")(.*?)"

与前三个一起工作,但我无法弄清楚如何处理第一个括号和引号之间的多个空格。在s之后使用+是相同的结果,使用*表示最后两个匹配。有什么想法吗?

3 个答案:

答案 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