C# 数字范围和字符的正则表达式

C# 数字范围和字符的正则表达式,c#,regex,C#,Regex,我需要一个正则表达式来匹配数字(大于5,但小于500)和数字后面的文本字符串的组合 例如,以下匹配将返回true:6个项目或450个项目或300个项目为红色(单词“Items”后面可能有其他字符) 而以下字符串将返回false:4个项目或501个项目或40个红色项目 我尝试了以下正则表达式,但不起作用: string s = "Stock: 45 Items"; Regex reg = new Regex("5|[1-4][0-9][0-9].Items"); Message

我需要一个正则表达式来匹配数字(大于5,但小于500)和数字后面的文本字符串的组合

例如,以下匹配将返回true:6个项目或450个项目或300个项目为红色(单词“Items”后面可能有其他字符)

而以下字符串将返回false:4个项目或501个项目或40个红色项目

我尝试了以下正则表达式,但不起作用:

string s = "Stock: 45 Items";          
Regex reg = new Regex("5|[1-4][0-9][0-9].Items");
MessageBox.Show(reg.IsMatch(s).ToString());

感谢您的帮助。

此正则表达式用于检查数字是否在5到500之间:

"[6-9]|[1-9][0-9]|[1-4][0-9][0-9]|500"
编辑:下面是一个更复杂的正则表达式示例,它也排除了大于1000的数字,并且排除了数字后面“Items”以外的字符串:

string s = "Stock: 4551 Items";
string s2 = "Stock: 451 Items";
string s3 = "Stock: 451 Red Items";
Regex reg = new Regex(@"[^0-9]([6-9]|[1-9][0-9]|[1-4][0-9][0-9]|500)[^0-9]Items");

Console.WriteLine(reg.IsMatch(s).ToString()); // false
Console.WriteLine(reg.IsMatch(s2).ToString()); // true
Console.WriteLine(reg.IsMatch(s3).ToString()); // false

下面的方法应该满足您的要求。它使用的不仅仅是正则表达式。但其意图更加明确

// itemType should be the string `Items` in your example
public static bool matches(string input, string itemType) {
    // Matches "Stock: " followed by a number, followed by a space and then text
    Regex r = new Regex("^Stock: (\d+) (.*)&");
    Match m = r.Match(s);
    if (m.Success) {
        // parse the number from the first match
        int number = int.Parse(m.Groups[1]);
        // if it is outside of our range, false
        if (number < 5 | number > 500) return false;
        // the last criteria is that the item type is correct
        return m.Groups[2] == itemType;
    } else return false;
}
//itemType应该是示例中的字符串'Items'
公共静态bool匹配(字符串输入,字符串itemType){
//匹配“Stock:”后跟一个数字,后跟一个空格,然后是文本
正则表达式r=新正则表达式(“^Stock:(\d+)(*)&”);
匹配m=r.匹配(s);
如果(m.成功){
//解析第一个匹配项中的数字
int number=int.Parse(m.Groups[1]);
//如果超出我们的范围,则为false
如果(编号<5 |编号>500)返回false;
//最后一个标准是项目类型是否正确
返回m.Groups[2]==itemType;
}否则返回false;
}

关于“\\\\\\\\\\\\\\\\\\\\”,它在linux shell中运行良好,因此在c中应该类似。他们在网络上有一个bug,在设置之后应该有反斜杠>。。。e、 g.500反斜杠>:-)

第二部分与01匹配,因此您需要将第一个数字更改为不允许0。@邪恶采样器:是的,您是对的,我已编辑解决方案以进行更正。谢谢您的快速响应。不幸的是,对于大于500的数字,您的正则表达式也会返回true,如何将字符串(项)添加到正则表达式?在第一种情况下[5-9]也不允许5作为有效值?是不是[6-9](即值不大于5)正符合我的要求。太棒了-非常感谢。我必须同意这个答案似乎是最符合逻辑的情况。基本上从字符串中获取值,并进行数值比较。我不认为有一个清晰的正则表达式可以做到这一点,在编写代码时清晰是一件好事@奥那克洛夫,很高兴你同意。谢谢
(([1-4][0-9][0-9])|(([1-9][0-9])|([6-9])))\sItems