正则表达式匹配;不起作用

本文关键字:不起作用 正则表达式 | 更新日期: 2023-09-27 18:25:59

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

"'bAsm_vidEmfUpdate_2 (0, ?unknown?)'b"

该字符串为CCD_ 1。

我试图在字符"(",")","?",","之前插入"''"像这个

"'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

正则表达式匹配;不起作用

您使用的是Groups[1],但没有捕获。将正则表达式更改为以下,或使用完全匹配的Group[0]

string regexStr = "(Asm_vidEmfUpdate_2 '(0, '?unknown'?'))";

不,匹配是正确的,但您只有一个组(整个字符串)。所以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仍然是整个字符串…)