[英]C# regex not matching string
我有一个格式如下的字符串:$ 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");
它似乎没有用,有什么我想念的吗?
$是正则表达式中的特殊字符,表示字符串结尾。 由于你在字符串结束后指定了东西,所以正则表达式根本不匹配任何东西。 逃避$字符就像
"\$[0-9a-fA-F]{2},"
无论如何AFAIK这对你的字符串不起作用,因为它不以“,”结尾。 你可以试试:
"^(\$[0-9a-fA-F]{2},?)+$"
您甚至可以通过使用不区分大小写的正则表达式匹配来简化正则表达式:
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]+,"
对于最后逗号的问题,我只想在最后附加一个以保持正则表达式尽可能简单。 但这只是我这样做的方式。
有三件事需要改变:
需要转义$符号,因为它代表行尾。
\$
需要调整你的正则表达式模式以匹配整个字符串而不是部分。
^(\$[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*$
参考文献:
下面的旧答案(忽略):
尝试这个:
"\$[0-9a-fA-F]{2}?[,]{0,1}"
您可能还想为您的集合添加一个重复修饰符,使其成为;
"\$[0-9a-fA-F]+,"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.