大家好我对regex世界很陌生我试图匹配这个正则表达式
"\bAsm_vidEmfUpdate_2 (0, ?unknown?)\b"
使用此字符串"Asm_vidEmfUpdate_2 (0, ?unknown?)"
。
我试图注入' \'字符之前'(',')' ,'?' ,','就像这样
"\bAsm_vidEmfUpdate_2 \(0\, \?unknown\?\)\b"
但它不起作用
但它导致不匹配,这是我的代码
string regexStr = "\bAsm_vidEmfUpdate_2 \(0\, \?unknown\?\)\b";
Regex regex = new Regex(regexStr);
string instr = "Asm_vidEmfUpdate_2 (0, ?unknown?)";
MatchCollection m = regex.Matches(instr);
string str1 = m[0].Groups[0].Value; // ArgumentOutOfRangeException
答案 0 :(得分:0)
您正在使用Groups[1]
,但您没有捕获一个。将正则表达式更改为以下内容或使用Group[0]
这是整个匹配。
string regexStr = "(Asm_vidEmfUpdate_2 \(0, \?unknown\?\))";
答案 1 :(得分:0)
不,它正确匹配,但您只有一个组(整个字符串)。因此Groups[1]
无效 - 如果您要求Groups[0]
,那就没问题了:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
string regexStr = @"Asm_vidEmfUpdate_2 \(0\, \?unknown\?\)";
Regex regex = new Regex(regexStr);
string instr = "Asm_vidEmfUpdate_2 (0, ?unknown?)";
MatchCollection m = regex.Matches(instr);
string str1 = m[0].Groups[0].Value;
Console.WriteLine(str1);
}
}
目前还不清楚你想要实现的目标。你的正则表达式不允许任何灵活性,所以你有效地只是要求string.Contains
。如果您尝试捕获字符串的不同部分,则可能需要以下内容:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
string regexStr = @"([A-Za-z_0-9]+) \((\d+), ([^\)]+)\)";
Regex regex = new Regex(regexStr);
string instr = "Asm_vidEmfUpdate_2 (0, ?unknown?)";
Match m = regex.Matches(instr)[0];
foreach (Group group in m.Groups)
{
Console.WriteLine(group.Value);
}
}
}
输出:
Asm_vidEmfUpdate_2 (0, ?unknown?)
Asm_vidEmfUpdate_2
0
?unknown?
(注意,组0仍然是整个字符串......)