我需要一个正则表达式,它匹配数字(大于5,但小于500)和数字后面的文本字符串的组合。
例如,以下匹配将返回true:6个项目或450个项目或300个项目红色(“项目”一词后面可能有其他字符)
以下字符串将返回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());
感谢您的帮助。
答案 0 :(得分:5)
此正则表达式适用于检查数字是否在5到500之间:
"[6-9]|[1-9][0-9]|[1-4][0-9][0-9]|500"
编辑:以下示例包含更复杂的正则表达式,它也会排除大于1000的数字,并在数字后排除“项目”以外的字符串:
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
答案 1 :(得分:2)
以下方法应该做你想要的。它使用的不仅仅是正则表达式。但它的意图更明确。
// 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;
}
答案 2 :(得分:0)
(([1-4][0-9][0-9])|(([1-9][0-9])|([6-9])))\sItems
答案 3 :(得分:0)
怎么样“\&lt; 500&gt; | \&lt; [1-9] [0-9] [0-9]&gt; | \&lt; [1-9] [0-9]&gt; | \百分比抑制率6-9]&gt;”中,它在linux shell中对我很好,所以它应该在c#中类似。他们在网上有一个错误,应该有反斜杠&gt;在集合之后...例如500backslash&GT; : - )