正则表达式匹配;不起作用
本文关键字:不起作用 正则表达式 | 更新日期: 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仍然是整个字符串…)