C# 正则表达式将字母数字值与特定条件匹配
我需要在以下条件下使用C#中的正则表达式匹配字符串: 整个字符串只能是字母数字(包括空格)。示例字符串应仅匹配:(数值可以更改) 示例1字符串:最佳5种产品 示例2字符串:5个最佳产品 示例3字符串:产品5最佳 我希望获得“5最佳”或“5最佳”,但以下字符串也匹配: 示例1字符串:最好的5种产品 示例2字符串:5个最佳产品 示例3字符串:产品5任何最好的 我正在使用:C# 正则表达式将字母数字值与特定条件匹配,c#,regex,string,C#,Regex,String,我需要在以下条件下使用C#中的正则表达式匹配字符串: 整个字符串只能是字母数字(包括空格)。示例字符串应仅匹配:(数值可以更改) 示例1字符串:最佳5种产品 示例2字符串:5个最佳产品 示例3字符串:产品5最佳 我希望获得“5最佳”或“5最佳”,但以下字符串也匹配: 示例1字符串:最好的5种产品 示例2字符串:5个最佳产品 示例3字符串:产品5任何最好的 我正在使用: string utter11 = Console.ReadLine(); string pattern11 = "^(?=.*
string utter11 = Console.ReadLine();
string pattern11 = "^(?=.*best)(?=.*[0-9]).*$";
bool match = Regex.IsMatch(utter11, pattern11, RegexOptions.IgnoreCase);
Console.WriteLine(match);
欢迎提出任何建议。谢谢试试
(?:(?你可以试试这个,我尽量靠近你的正则表达式:
^(?=.*(?:best [0-9]|[0-9] best)).*$
如果要获取捕获组,只需做一个小更改:
^(?=.*(best [0-9]|[0-9] best)).*$
它基本上是在寻找best[0-9]
或[0-9]best
,据我所知,这正是您要寻找的。这个(完整示例)怎么样:
类程序
{
静态void Main(字符串[]参数)
{
List validStrings=新列表
{
“最佳5款产品”,
“五大最佳产品”,
“最佳产品5”,
“最佳5款产品”,
“5件最好的产品”,
“最佳产品5”,
};
列表无效字符串=新列表
{
“最佳5款产品。”,
“五大最佳产品”,
“最佳产品5”,
“最佳产品5/s”,
“5件最好的产品”,
“产品5任何东西都可以”,
};
字符串模式1=@“^([A-Za-z0-9\s]+\s+)[0-9]\s+([A-Za-z0-9\s]+\s+)?最佳(\s+[A-Za-z0-9\s]+)\s*);
字符串模式2=@“^([A-Za-z0-9\s]+\s+)\s*)最佳\s+([A-Za-z0-9\s]+\s+)[0-9](\s+[A-Za-z0-9\s]+)\s*);
string pattern=string.Format(“{0}{1}”,pattern1,pattern2);
foreach(有效字符串中的var str)
{
bool match=Regex.IsMatch(str,pattern);
控制台写入线(匹配);
}
Console.WriteLine();
foreach(无效字符串中的var str)
{
bool match=Regex.IsMatch(str,pattern);
控制台写入线(匹配);
}
Console.Read();
}
}
如果您有更多关于模式应匹配和不应匹配的字符串的示例,我将在必要时对表达式进行优化。来自OP:“整个字符串只能是字母数字(包括空格)”。我认为您应该将
更改为字符类。@Vache我想知道OP为什么要使用*
本身。另外,不应该匹配的字符串似乎不需要做任何关于字母数字的事情,包括空格,但实际上是关于最佳的位置和数字。否则,我想我们只需等待OP澄清…@Jerry:他试图在字符串模式中获得最佳或5,但你的正则表达式捕获整个字符串。如果我错了,请告诉我???@AnuragJain我的正则表达式没有捕获整个字符串。它匹配整个字符串。我建议的第二个正则表达式只捕获最佳5
和最佳5
…试试这个规则lar表达式:(最佳\s\d*)|(\d*\sbest)|(\d)
class Program
{
static void Main(string[] args)
{
List<string> validStrings = new List<string>
{
"best 5 products",
"5 best products",
"products 5 best",
"best anything 5 products",
"5 anything best products",
"products 5 anything best",
};
List<string> invalidStrings = new List<string>
{
"best 5 products.",
"5 best product;s",
"produc.ts 5 best",
"best anything 5 product/s",
"5 anything best produc-ts",
"products 5 anything be_st",
};
string pattern1 = @"^(([A-Za-z0-9\s]+\s+)|\s*)[0-9]\s+([A-Za-z0-9\s]+\s+)?best((\s+[A-Za-z0-9\s]+)|\s*)$";
string pattern2 = @"^(([A-Za-z0-9\s]+\s+)|\s*)best\s+([A-Za-z0-9\s]+\s+)?[0-9]((\s+[A-Za-z0-9\s]+)|\s*)$";
string pattern = string.Format("{0}|{1}", pattern1, pattern2);
foreach (var str in validStrings)
{
bool match = Regex.IsMatch(str, pattern);
Console.WriteLine(match);
}
Console.WriteLine();
foreach (var str in invalidStrings)
{
bool match = Regex.IsMatch(str, pattern);
Console.WriteLine(match);
}
Console.Read();
}
}