正则表达式MatchCollection返回1而不是预期的3

本文关键字:MatchCollection 返回 正则表达式 | 更新日期: 2023-09-27 18:05:53

我在c#中有一个长字符串,它的格式如''server'value我一直在使用"(?<=''''').*(?='')"的正则表达式模式来从字符串中提取服务器。然而,有一个用例,其中多个''server'value'字符串可以链接在一起,像这样'''serverA'value1' + '''serverB'value2' + '''serverC'value3'

我正在尝试使用MatchCollection使用模式(?<=.'''')来提取所有服务器名称。*(>='')

第一个分组结构中的句点,用于解释'字符。我希望结果返回3次出现,但它只返回1。我的模式有什么问题吗?

   string expression = "'''''serverA''value1' + '''''serverB''value2' + '''''serverC''value3'";
   string pattern = @"(?<='''').*(?='')";
   MatchCollection matches;
   matches = Regex.Matches(expression, pattern);

正则表达式MatchCollection返回1而不是预期的3

你可以尝试下一个模式:

@"''''(.*?)''"

如果我得到,我得到的结果是这样的

serverA'value1' + '''serverB'value2' + '''serverC

你想要得到这些匹配:

serverA 
serverB 
serverC

可以使用惰性量化:

(?<='''').*?(?='')