Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 匹配不等于_C#_Regex - Fatal编程技术网

C# 匹配不等于

C# 匹配不等于,c#,regex,C#,Regex,我正在尝试创建一个正则表达式,当它遇到如下情况时,它将返回true: MyField1 = 10293856 或 数字串将始终为8位数字串。但是,我希望下面的案例返回false。这是我唯一需要担心的情况,一连串的8个9 MyField1 = 99999999 我如何构造一个正则表达式来实现这一点 我想让表达式检查 MyField1 = xxxxxxxx 其中x都是数字。但它唯一不可能是全部9。您不需要正则表达式 public static bool Validate(string strN

我正在尝试创建一个正则表达式,当它遇到如下情况时,它将返回true:

MyField1 = 10293856

数字串将始终为8位数字串。但是,我希望下面的案例返回false。这是我唯一需要担心的情况,一连串的8个9

MyField1 = 99999999
我如何构造一个正则表达式来实现这一点

我想让表达式检查

MyField1 = xxxxxxxx

其中x都是数字。但它唯一不可能是全部9。

您不需要正则表达式

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
参数或在返回中。

假设
MyField1=10293856
字符串出现在文件的一行上,下面是一个正则表达式

if(Regex.IsMatch)(文本、,
@“#匹配'var=8digitval',其中8digitval并不都是9。
^#锚定至线路起点。
MyField1[]=[]#固定了文字变量名和等号。
(?!9{8}$)#断言值不是8个9。
[0-9]{8}#值是八位数字。
$#锚定到线路末端。
", 
RegexOptions.Multiline | RegexOptions.ignorepattern(空格)){
//成功的比赛
}否则{
//匹配尝试失败
} 
上面的正则表达式将匹配具有硬编码变量名为:
MyField1
的所有行。如果您希望匹配其他变量名(等号周围有可变数量的空格),则此变量可能更符合您的要求:

if(Regex.IsMatch)(文本、,
@“#匹配'var=8digitval',其中8digitval并不都是9。
^#锚定至线路起点。
\w+\s*=\s*#变量变量变量名和等号。
(?!9{8}$)#断言值不是8个9。
[0-9]{8}#值是八位数字。
$#锚定到线路末端。
", 
RegexOptions.Multiline | RegexOptions.ignorepattern(空格)){
//成功的比赛
}否则{
//匹配尝试失败
} 

我假设你是从文本文件中解析这个?你的问题有点不清楚输入的确切性质,或者你在做什么。下面使用正则表达式在一行文本中查找名称和值,然后计算约束

static void Main()
{
    const string Test = @"MyField1 = 10293856
MyField1=72946392 MyField1=9999999 MyField1=12356642”

Regex exp=new Regex(@“^(?\w+)\s*=\s*(?\d{8})\s*$”,RegexOptions.Multiline);
foreach(exp.Matches中的匹配(测试))
{
字符串名称=匹配。组[“名称”]。值;
字符串值=匹配。组[“值”]。值;
如果(值!=“9999999”)
{
WriteLine(“{0}={1}”,名称,值);
}
}
}
这实际上是一个表达式可能得到的最接近的结果,因为您找不到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"))
        ...
Regex exp=new Regex(@“^(?\w+)\s*=\s*(?\d{8})\s*$”,RegexOptions.Multiline);
foreach(exp.Matches(Test).OfType()中的匹配,其中(m=>m.Groups[“Value”].Value!=“9999999”))
...

你想让它只在看到字符串时返回false
MyField1=9999999
?前导零-好还是坏?9999999到底出了什么问题?是确切的字符串吗?8个重复数字?还是任意数量的重复数字?你需要提供你正在寻找的实际模式。是的,我需要考虑的唯一情况是y大约是当数字字符串为9999999时。它可以是任何其他数字字符串,只要它的长度为8。为什么您需要确切地使用正则表达式?为什么您不创建一个正则表达式,当有8 9时返回true?这要容易得多。尽管0和999999 8之间的8个字符也很小。一个正则表达式lar表达式不是这项工作的正确工具,它的杀伤力太大,就像在捕猎兔子时使用双管gernade发射器一样。这是一个非常强大的解决方案。但是,它会拒绝0099999,这可能是op想要的,但没有明确要求。我认为op试图从文本中提取8位数字我没有I你可以这样做:(?!9{8}$)#断言值不是八九。
    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);
        }
    }
}
    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])$