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");
它似乎不工作,但有什么我错过了?
$是正则表达式中的一个特殊字符,表示字符串结束。这个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测试器
- RegexHero试验机
- 关于正则表达式。IsMatch(而不是使用Match)
- MSDN Regex.isMatch
c#正则表达式小抄表
- 一个更好的。net正则表达式测试器
下面的旧答案(忽略):
试试这个:
"'$[0-9a-fA-F]{2}?[,]{0,1}"
您可能还想为您的集合添加一个repeat修饰符,使它变成;
"'$[0-9a-fA-F]+,"