匹配不等于
本文关键字:不等于 | 更新日期: 2023-09-27 18:17:15
我试图使一个正则表达式,将返回true当它遇到这样的东西:
MyField1 = 10293856
或
MyField1 = 72946392
数字字符串总是8位的字符串。但是,我希望下面的情况返回false。这是我唯一需要担心的情况,一串8个9。
MyField1 = 99999999
我如何构造一个正则表达式来为我做这件事?
我想让表达式检查是否
MyField1 = xxxxxxxx
其中x都是数字。但唯一不可能是全9
假设MyField1 = 10293856
字符串出现在文件的一行,这里是一个正则表达式,它应该能做到这一点
if (Regex.IsMatch(text,
@"# Match 'var = 8digitval', where 8digitval is not all nines.
^ # Anchor to start of line.
MyField1[ ]=[ ] # Fixed literal var name & equals sign.
(?!9{8}$) # Assert value is not eight nines.
[0-9]{8} # Value is eight digits.
$ # Anchor to end of line.
",
RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace)) {
// Successful match
} else {
// Match attempt failed
}
上面的正则表达式将匹配所有具有硬编码变量:MyField1
的行。如果您希望匹配其他变量名(等号周围有不同数量的空白),这个可能更符合您的要求:
if (Regex.IsMatch(text,
@"# Match 'var = 8digitval', where 8digitval is not all nines.
^ # Anchor to start of line.
'w+'s*='s* # Variable var name & equals sign.
(?!9{8}$) # Assert value is not eight nines.
[0-9]{8} # Value is eight digits.
$ # Anchor to end of line.
",
RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace)) {
// Successful match
} else {
// Match attempt failed
}
你不需要正则表达式。
public static bool Validate(string strNum)
{
bool ret = false;
Int32 num = 0;
if (Int32.TryParse(strNum, out num))
{
if (num != 99999999)
{
ret = true;
}
}
return ret;
}
您还可以让函数返回解析后的int以及out
参数或返回
我假设你正在解析这个文本文件?你的问题有点不清楚输入的确切性质,或者你在做什么。下面的代码使用Regex查找一行文本中的名称和值,然后计算约束。
static void Main()
{
const string Test = @"MyField1 = 10293856
MyField1 = 72946392MyField1 = 99999999MyField1 = 12356642";
Regex exp = new Regex(@"^(?<Name>'w+)'s*='s*(?<Value>'d{8})'s*$", RegexOptions.Multiline);
foreach(Match match in exp.Matches(Test))
{
string name = match.Groups["Name"].Value;
string value = match.Groups["Value"].Value;
if (value != "99999999")
{
Console.WriteLine("{0} = {1}", name, value);
}
}
}
这是你可能得到的最接近的表达式,因为你不能找到8位数的字符串,然后测试它的值,看看它是否都是9。
你也可以使用Linq表达式:
Regex exp = new Regex(@"^(?<Name>'w+)'s*='s*(?<Value>'d{8})'s*$", RegexOptions.Multiline);
foreach(Match match in exp.Matches(Test).OfType<Match>().Where(m => m.Groups["Value"].Value != "99999999"))
...
^([0-8]'d{8})|('d[0-8]'d{7})|('d{2}[0-8]'d{6})|('d{3}[0-8]'d{5})|('d{4}[0-8]'d{4})|('d{5}[0-8]'d{3})|('d{6}[0-8]'d{2})|('d{7}[0-8]'d{1})|('d{8}[0-8])$