正则表达式匹配不起作用

时间:2014-10-08 11:23:00

标签: c# regex

大家好我对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

2 个答案:

答案 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仍然是整个字符串......)