如何使用正则表达式获取所有匹配项
本文关键字:何使用 正则表达式 获取 | 更新日期: 2023-09-27 18:31:46
我需要使用正则表达式获取给定单词中的所有匹配项(即所有组合)
内容:
美国广播公司
由此,当我给出一些像 [A-Z][A-Z] 这样的模式时,我需要得到 AB 和 BC。现在它只给出"AB"作为匹配模式。
提前致谢
int i = 0;
List<Match> matches = new List<Match>();
while(i < input.Length){
Match m = Regex.Match(input.Substring(i),"[A-Z]{2}");
if(m.Success){
matches.Add(m);
i += m.Index+1;
}else break;
}
您还可以实现它以支持lazy
匹配,如下所示:
public static IEnumerable<Match> Matches(string input, string pattern) {
int i = 0;
while (i < input.Length){
Match m = Regex.Match(input.Substring(i), "[A-Z]{2}");
if (m.Success) {
yield return m;
i += m.Index + 1;
}
else yield break;
}
}
//Use it
var matches = Matches(input, "[A-Z]{2}");
您可以使用前瞻,这样就不会消耗匹配项:
(?=([A-Z]{2}))
IDE演示。
.NET 支持在环顾中捕获组
var result=Regex.Matches(input,"(?=(..))")
.Cast<Match>()
.Select(x=>x.Groups[1].Value);
int i = 0;
List<Match> matches = new List<Match>();
while(i < input.Length){
Match m = Regex.Match(input,"[A-Z][Z-A]");
if(m.Success){
matches.Add(i++);
i = m.Index ++ 1;
}
}