假设我有字符串:
“ Hello World ;一些随机文本;foo;”
如何选择“;”之前的所有内容
换句话说,我希望第一个匹配是:“hello world”
第二个匹配是“一些随机文本”
等等
我尝试过的事情:
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() 方法,但我想使用这种技术......我做错了什么?为什么 match.NextMatch();
方法不返回下一个匹配项?
最佳答案
我强烈建议您按照您的指示使用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
返回一个新匹配项。它不会改变当前的 Match。在 while 循环中将 match.NextMatch();
更改为 match = match.NextMatch();
应该可以解决该问题。
关于c# - 匹配字符串直到特定模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8808430/