我对正则表达非常新,所以我为这个问题的'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());
}
}
答案 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,而不是要求字符串与它们完全匹配。