假设我有字符串:
“你好世界;一些随机文字; foo;”
我怎样才能选择所有内容,直到';'
换句话说,我希望第一场比赛是:"hello world"
第二场比赛为" some random text"
等
我尝试过的事情:
string s = "hello world; some random text; foo;";
Regex r = new Regex(".+?;");
var match = r.Match(s);
while(match.Success)
{
Console.WriteLine(match.Value.ToString());
// first match is "hello world"!! but this turns out to be an infinite loop
match.NextMatch();
}
我知道我可以使用Regex.Split()方法,但我想使用这种技术intead ...我做错了什么?为什么match.NextMatch();
方法不会返回下一个匹配?
答案 0 :(得分:5)
我强烈建议您按照指示使用Regex.Split
,或者使用string.Split
来表示这个简单示例。
但是,如果你仍然想要使用循环,你可以做这样的事情:
string s = "hello world; some random text; foo;";
Regex r = new Regex(".+?;");
for (Match m = r.Match(s); m.Success; m = m.NextMatch())
{
Console.WriteLine(m.Value);
}
您的具体示例存在的问题是NextMatch
会返回新匹配。它不会改变当前的匹配。在while循环中将match.NextMatch();
更改为match = match.NextMatch();
可以解决它。
答案 1 :(得分:0)
这似乎解决了这个问题:
string s = "hello world; some random text; foo;";
Regex r = new Regex(".*?;{1}");
var match = r.Match(s);
while(match.Success)
{
Console.WriteLine(match.Value.ToString());
// move match index to avoid getting the same match
match = r.Match(s, match.Index + match.Length);
}