正则表达式:如何在字符串中获取组的所有匹配项

问题描述 投票:3回答:2

我有以下正则表达式

.*context\.Database\.SqlQuery<[A-Za-z]+>\("(?<sqlStatement>.*?[^\\])"\)

我有以下字符串

context.Database.SqlQuery<string>("select [Name] from [DomainModel] where UniqueId = 'someGuid'").Single();context.Database.SqlQuery<string>("select [Description] from [DomainModel] where UniqueId = 'someGuid'").Single();

我需要匹配所有出现的context.Database.SqlQuery<string>("")并在这些paranthesis之间提取字符串。当我正在测试它时,像这样拆分字符串:

context.Database.SqlQuery<string>("select [Name] from [DomainModel] where UniqueId = 'someGuid'").Single();
context.Database.SqlQuery<string>("select [Description] from [DomainModel] where UniqueId = 'someGuid'").Single();

它工作正常。我需要让它在前面的场景中工作,匹配的输出应该是这样的

第一场比赛

从[DomainModel]中选择[Name],其中UniqueId ='someGuid'

第二场比赛

从[DomainModel]中选择[Description],其中UniqueId ='someGuid'

这是regexr

regex string regex-group
2个回答
2
投票

你的问题在一开始就是.*。由于这可以匹配所有内容,最终会获得除最后一个之外的所有匹配。

如果你放弃它,你的模式可以拿起每一个。

context\.Database\.SqlQuery<[A-Za-z]+>\("(?<sqlStatement>.*?[^\\])"\)

1
投票

问题是.*因为.与除新行之外的任何字符匹配。和* quntifies正则表达式匹配零和多次。

你只需要从给定的正则表达式的开头删除.*Here是给定问题的典范

© www.soinside.com 2019 - 2024. All rights reserved.