c#正则表达式不匹配字符串

本文关键字:字符串 不匹配 正则表达式 | 更新日期: 2023-09-27 18:13:36

我有一个格式如下的字符串:$20,$40,$AA,$FF。基本上,十六进制数字,它们可以是许多字节。我想检查字符串是否符合上述格式,所以我尝试这样做:

        string a = "$20,$30,$40";
        Regex reg = new Regex(@"$[0-9a-fA-F],");
        if (a.StartsWith(string.Format("{0}{1}", reg, reg)))
            MessageBox.Show("A");

它似乎不工作,但有什么我错过了?

c#正则表达式不匹配字符串

$是正则表达式中的一个特殊字符,表示字符串结束。这个regex根本不会匹配任何东西,因为你指定的是字符串结束后的东西。转义$字符,如

"'$[0-9a-fA-F]{2},"

无论如何,我敢说这将不适用于你的字符串,因为它不以","结束。你可以试试:

"^('$[0-9a-fA-F]{2},?)+$"

您甚至可以通过使用不区分大小写的regex匹配来简化正则表达式:

Regex reg = new Regex(@"^('$[0-9A-F]{2},?)+$", RegexOptions.IgnoreCase);

编辑:正确匹配2个十六进制数字。

编辑:也许你应该写你的正则表达式检查:

if (Regex.IsMatch(a,@"^('$[0-9A-F]{2},?)+$",RegexOptions.IgnoreCase)) 
{
    // Do whatever
}

我想你错过了一个量词:

"'$[0-9a-fA-F]+,"

对于末尾逗号的问题,我将简单地在末尾附加一个逗号,以使正则表达式尽可能简单。但我就是这么做的

有三处需要修改:

需要转义$符号,因为它表示行结束

'$

需要调整你的regex模式以匹配整个字符串而不是部分

^('$[0-9a-fA-F]{2},+)+'$[0-9a-fA-F]{2}$

需要更改代码以使用Regex.IsMatch.

string a = "$20,$30,$40"; 
if (Regex.IsMatch(a,@"^('$[0-9a-fA-F]{2},+)+'$[0-9a-fA-F]{2}$",RegexOptions.IgnoreCase))
        MessageBox.Show("A");
PS:

如果输入字符串有空格,如制表符或空格,则需要修改此正则表达式。在这种情况下,您必须在正确的位置使用"'s"。例如,如果逗号周围有空格,如

string a = "$20 ,$30, $40";

你需要这样调整你的RegEx:

^('$[0-9a-fA-F]{2}'s*,+'s*)+'$[0-9a-fA-F]{2}'s*$

引用:

    c# Regex测试器
      一个更好的。net正则表达式测试器
    • RegexHero试验机
  1. 关于正则表达式。IsMatch(而不是使用Match)
    • MSDN Regex.isMatch
  2. c#正则表达式小抄表

下面的旧答案(忽略):

试试这个:

"'$[0-9a-fA-F]{2}?[,]{0,1}"

您可能还想为您的集合添加一个repeat修饰符,使它变成;

"'$[0-9a-fA-F]+,"