C# 正则表达式匹配不';行不通

C# 正则表达式匹配不';行不通,c#,regex,C#,Regex,大家好,我对regex世界还很陌生,我正在尝试匹配这个regex "\bAsm_vidEmfUpdate_2 (0, ?unknown?)\b" 使用此字符串“Asm\u videmfuupdate\u 2(0,?未知?)” 我试着在字符“(”,“)”,“?”,“,”之前插入“\”,就像这样 “\bAsm\u videmfuupdate\u 2\(0\,\?未知\?\)\b” 但它也不起作用 但它会导致不匹配这是我的代码 string regexStr = "\bAsm_vidEmfUpdat

大家好,我对regex世界还很陌生,我正在尝试匹配这个regex

"\bAsm_vidEmfUpdate_2 (0, ?unknown?)\b"
使用此字符串
“Asm\u videmfuupdate\u 2(0,?未知?)”

我试着在字符“(”,“)”,“?”,“,”之前插入“\”,就像这样

“\bAsm\u videmfuupdate\u 2\(0\,\?未知\?\)\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

您正在使用
组[1]
,但没有捕获组。将正则表达式更改为下面的值,或使用整个匹配项的
组[0]

string regexStr = "(Asm_vidEmfUpdate_2 \(0, \?unknown\?\))";
不,它匹配正确,但您只有一个组(整个字符串)。因此
组[1]
无效-如果您要求
组[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仍然是整个字符串…

问题不在于您的正则表达式。@JonSkeet Edited:很抱歉,它是一个在字符“(“,”),“?”,”之前插入“\”的函数,“使用正则表达式匹配文字字符串会增加不必要的开销。建议使用此工具来了解发生了什么:仍然不清楚您要实现什么。你从哪里弄来的正则表达式?如果这是原始正则表达式,那么
(0,?未知?
部分就是分组,尽管看起来它试图以一种奇怪的方式提供一个名称。我们在这里缺乏很多背景。@AvinashRaj:不,我知道。我使用了OP的正则表达式,但没有对其进行更改,以表明这不是问题所在。如果我使用“\b”匹配整个单词,则不会match@IbrahimAmer:那条评论几乎没有提供足够的信息。我们不知道您在哪里使用
\b
,也不知道输入是什么。我希望我的正则表达式类似于“\bAsm\u vidEmfUpdate\u 2\(0,\?未知\?)\b”,当我使用它时,它不会match@IbrahimAmer:这与问题中的内容不符,是吗?问号和括号是否意味着要转义?(自从我第一次回复后,这个评论中的括号都变了!)每次你改变你的要求,都是在浪费人们试图帮助你的时间。请努力把你的问题弄清楚。回答被问到的问题是非常令人沮丧的,结果却发现这毕竟不是真正的问题。