c# - 匹配字符串直到特定模式

标签 c# regex

假设我有字符串:

“ 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/

相关文章:

c# - 如何将字符串的换行符更改为空格字符

c# - GetSqlValues 是否获取隐藏字段?

c# - 如何检查是否可以输入一个SemaphoreSlim?

c# - SendMessage 与 WndProc

JavaScript:查找数字正则表达式匹配

PHP preg 反转

c# - blob返回坐标错误

python - 正则表达式将函数参数周围的 ( ) 替换为 [ ]

regex - 使用带有方括号和引号的 sed 删除模式

jquery - jQuery "empty:"-选择器如何工作? (删除空标签)