匹配字符串直到特定模式

时间:2012-01-10 18:24:42

标签: c# regex

假设我有字符串:

“你好世界;一些随机文字; 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();方法不会返回下一个匹配?

2 个答案:

答案 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);
}