C#正则表达式多捕获
我正在尝试编写一个C#Regexp,它可以匹配以下行: 行->我的文本1(示例文本1)(9874)(1478) 匹配项:C#正则表达式多捕获,c#,regex,C#,Regex,我正在尝试编写一个C#Regexp,它可以匹配以下行: 行->我的文本1(示例文本1)(9874)(1478) 匹配项: [0]=我的文本1 [1] =示例文本1 [2] =9874 [3] =1478 行->内容1:我的文本2(文本2)(98631) 匹配项: [0]=内容1:我的文本2 [1] =文本2 [2] =98631 行->这是另一个示例:mqlsdjflkj(1478) 匹配项: [0]=这是另一个示例:mqlsdjflkj [1] =1478 我做了很多测试,但不能匹
- [0]=我的文本1
- [1] =示例文本1
- [2] =9874
- [3] =1478
- [0]=内容1:我的文本2
- [1] =文本2
- [2] =98631
- [0]=这是另一个示例:mqlsdjflkj
- [1] =1478
Regex myRegex = new Regex(@"(.*?)(?:\((.*?)\).*?)*");
这将捕获最多4个组:
Regex myRegex = new Regex(@"(.*?)(?:\((.*?)\)(?:\((.*?)\)(?:\((.*?)\))?)?)?");
在计算复杂正则表达式的过程中,通常可以通过“手动”进行解析来做得更好。而且它通常更易于维护
private void button1_Click(object sender, EventArgs e)
{
String[] r1 = MyParser("my text 1 (Sample Text1) (9874) (1478) ");
String[] r2 = MyParser("Thing1 : my text 2 (Text2) (98631)");
String[] r3 = MyParser("This is a other Sample : mqlsdjflkj (1478) ");
}
string[] MyParser(String Input)
{
String[] RawResult;
RawResult = Input.Split(new char[] {'(', ')'}, StringSplitOptions.RemoveEmptyEntries );
List<string> Results = new List<string>();
foreach(String S in RawResult)
{
if (String.IsNullOrWhiteSpace(S) == false)
Results.Add(S.Trim());
}
return Results.ToArray();
}
private void按钮1\u单击(对象发送者,事件参数e)
{
String[]r1=MyParser(“我的文本1(示例文本1)(9874)(1478)”;
String[]r2=MyParser(“Thing1:mytext2(Text2)(98631)”;
String[]r3=MyParser(“这是另一个示例:mqlsdjflkj(1478)”;
}
字符串[]MyParser(字符串输入)
{
字符串[]结果;
RawResult=Input.Split(新字符[]{'(',')},StringSplitOptions.RemoveEmptyEntries);
列表结果=新列表();
foreach(RawResult中的字符串S)
{
if(String.IsNullOrWhiteSpace=false)
结果:添加(S.Trim());
}
返回结果。ToArray();
}
Thx,但它不工作…:(我试过C代码,但没有成功:(@Muby:你试过双重转义\(
&\\)
?