正则表达式将字母数字值与特定条件匹配

时间:2014-01-17 15:43:50

标签: c# regex string

我需要在C#中使用Regex在以下条件下匹配字符串:

整个字符串只能是字母数字(包括空格)。示例字符串只应匹配:(数值可以更改)

示例1字符串:最佳5种产品

示例2字符串:5个最佳产品

Example3 String:products 5 best

我希望获得“5最佳”或“最佳5”,但以下字符串也匹配:

示例1字符串:最好的5个产品

Example2字符串:5个最好的产品

示例3字符串:产品5最佳

我正在使用:

string utter11 = Console.ReadLine();

string pattern11 = "^(?=.*best)(?=.*[0-9]).*$";

bool match = Regex.IsMatch(utter11, pattern11, RegexOptions.IgnoreCase);
Console.WriteLine(match);

欢迎任何建议。感谢

3 个答案:

答案 0 :(得分:1)

您可以尝试使用尽可能接近正则表达式的内容:

^(?=.*(?:best [0-9]|[0-9] best)).*$

regex101 demo

如果您想获得捕获组,只需进行一些小改动:

^(?=.*(best [0-9]|[0-9] best)).*$

regex101 demo

它基本上是在寻找best [0-9][0-9] best,我明白这就是你要找的东西。

答案 1 :(得分:0)

尝试(?:(?<=best)\s+([0-9]))|(?:([0-9])\s+(?=best))

预期“最佳”前缀,然后是空格和数字,或数字和空格,然后是“最佳”的后缀

答案 2 :(得分:0)

这个(完整的例子):

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();
    }
}

如果您有更多关于模式应该和不匹配的字符串的示例,我会在必要时优化表达式。