c#使用正则表达式获得多个匹配

本文关键字:正则表达式 | 更新日期: 2023-09-27 18:01:38

var userVersionHTML = "2448hello2448welcome2448";
Regex regex = new Regex("2448(.*?)2448");
var v = regex.Match(userVersionHTML);
versionNumberStatus.Text = v.Groups[1].ToString();
usernameStatus.Text = v.Groups[2].ToString();

目标是让versionNumberStatus.Text显示"hello",让usernameStatus.Text显示"welcome"。

问题是usernameStatus.Text没有出现。什么好主意吗?

c#使用正则表达式获得多个匹配

您在这里只有一个捕获组,在"2448(.*?)2448"模式中,因此您无法访问.Groups[2]

一个解决方案是使用2448分割或使用2448(.*?)2448(.*?)2448模式。

参见regex演示。

或者这个c#代码:

var userVersionHTML = "2448hello2448welcome2448";
var chunks = userVersionHTML.Split(new[] {"2448"}, StringSplitOptions.RemoveEmptyEntries); 
var versionNumberStatus = chunks[0];
var usernameStatus = chunks[1];

一种解决方案是使用Matches()与这样的正则表达式:

var userVersionHTML = "2448hello2448welcome2448";
Regex regex = new Regex("(2448)?(.*?)2448");
var v = regex.Matches(userVersionHTML);
versionNumberStatus.Text = v[0].Groups[2].ToString();
usernameStatus.Text = v[1].Groups[2].ToString();