REGEX - 无法掌握基础知识

时间:2012-06-27 11:09:51

标签: c# regex

我对正则表达非常新,所以我为这个问题的'noobyness'道歉... 我需要匹配我们在工作中使用的ID的模式。

到目前为止,该模式的唯一规范是长度为9个字符,由大写字母和数字组成。 ID可以包含1个或任意数量的大写字母或数字,只要字符串的总长度为9个字符。

到目前为止,我有以下内容...... [A-Z] [0-9] {9} 这不能确保字符串至少包含一个字母或数字(因此一个9个字符长的字符串会通过)... Alos,我确定它与由非大写字母组成的9个字母单词匹配。

我做了一些谷歌搜索,但我没有发现任何愚蠢的东西让我明白。

任何非常适用的帮助:)

由于

编辑:只是回顾一下要求 - id必须是9个字符长,不能再少。它将由大写字母和数字组成。可以有任何数量的字母或数字,只要id包含至少一个(所以BH98T6YUO或R3DBLUEEE或1234R6789

我还会发布我的代码以确保位没有错误...... ??

 string myRegex = "A ton of different combinations that i have tried";
 Regex re = new Regex(myRegex);

        // stringCombos is a List<string> containing all my strings
        // The strings contain within them, my id
        // I am attempting to pull out this id 
        // the below is just to print out all found matches for each string in the list 
        foreach (string s in stringCombos)
        {
            MatchCollection mc = re.Matches(s);
            Console.WriteLine("-------------------------");
            Console.Write(s);
            Console.WriteLine("  ---  was split into the following:");
            foreach (Match mt in mc)
            {
                Console.WriteLine(mt.ToString());
            }
        }

2 个答案:

答案 0 :(得分:2)

你实际上必须学习正则表达式作为一种语言。曲线有点陡峭,但有很多优秀的基础教程。此外,您可能会在聊天情况下获取这一点(SO具有聊天功能) - 这就是我最初学习它们的方式......

我认为这可能对你的情况有用:

[A-Z0-9]{1,9}

根据您的更新,对于9个元素,请使用:

[A-Z0-9]{9}

但请注意,此解决方案中不包含至少包含一个字母和至少一个数字的要求。一个简单的方法是将第二个和第三个匹配应用于第一个匹配:

[0-9]*[A-Z][0-9]*
[A-Z]*[0-9][A-Z]*

因此匹配三次。您可以使用花哨的前向和后向引用来获得此结果,但是您无法使用regular grammar来捕获该要求。

答案 1 :(得分:2)

你需要使用^和$匹配字符串的开头和结尾,这意味着它将匹配9个字符而不是10个

^[0-9A-Z]$

您并不清楚上述匹配要求匹配9个字符(大写或数字)。

您可能会发现Expresso对于尝试表达式非常有用。

编辑(根据新要求)如果您需要至少1个大写字符,则可以使用以下内容。

\b[0-9A-Z]{8}(?:(?<=.*[A-Z].*)[0-9]|(?<=.*[0-9].*)[A-Z])\b

击穿

\b匹配单词边界

[0-9A-Z]{8} 8个大写字母或数字

(?:开始一个非捕获组,这是包含或条件

(?<=.*[A-Z].*)[0-9]这基本匹配[0-9],只要在第一个[0-9A-Z]{8}捕获中它之前的某处有一个A-Z

|

(?<=.*[0-9].*)[A-Z]这基本上匹配[A-Z],只要在第一个[0-9A-Z]{8}捕获中它之前有一个0-9

)关闭非捕获组

\b匹配单词边界

基本上对前8个字符进行匹配,然后如果第9个字符是数字,那么前8个字符必须是大写字母,如果第9个是AZ,那么前8个字符必须有一个数字

新编辑的版本现在将找到出现在字符串中的ID,而不是要求字符串与它们完全匹配。