我正在尝试创建一个正则表达式,当遇到类似这样的事情时它将返回true:
MyField1 = 10293856
或
MyField1 = 72946392
数字字符串将始终是8位数的字符串。但是,我希望以下情况返回false。这是我唯一需要担心的情况,一串八个九。
MyField1 = 99999999
如何构建一个能为我做这个的正则表达式?
我希望表达式检查是否
MyField1 = xxxxxxxx
其中x是全部数字。但唯一不可能的是全部9个。
答案 0 :(得分:3)
假设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
}
答案 1 :(得分:2)
您不需要正则表达式。
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
参数或者返回。
答案 2 :(得分:0)
我假设你要从文本文件中解析这个?您的问题在输入的确切性质或您正在做的事情上有些不清楚。下面使用正则表达式在一行文本中查找名称和值,然后计算约束。
static void Main()
{
const string Test = @"MyField1 = 10293856
MyField1 = 72946392 MyField1 = 99999999 MyField1 = 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"))
...
答案 3 :(得分:0)
^([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])$