C# 正则表达式匹配:长度 5-24,最多 1 个下划线
本文关键字:最多 下划线 5-24 长度 正则表达式 | 更新日期: 2023-09-27 17:57:14
我想正则表达式匹配一个字符串
- 仅是字母数字。
- 字母只能是大写的。
- 总长度最小 5 个字符,最大 24 个字符。
- 可以包括最小值 0 最多 1 个下划线出现在除第一个或最后一个位置之外的任何位置。
我想我必须以某种方式嵌套语句,以便总长度为 5-24,但最多可能有一个下划线。我已经阅读了一些正则表达式教程,但无法理解执行此操作的方法。也不知道如何指定下划线的可接受位置(如果存在)。
[A-Z0-9]{5,24}[_]{0,1}
如果在 C# 代码中使用它,最好检查正则表达式之外的字符串长度。(可以将其塞进正则表达式中,但我不会在这里显示)。
private static bool Validate(string str) {
if (str.Length < 5 || str.Length > 24) {
return false;
}
return Regex.IsMatch(str, @"^[A-Z0-9]+(?:_[A-Z0-9]+)?'z");
}
正则表达式是:
^[A-Z0-9]+(?:_[A-Z0-9]+)?'z
如果字符串以换行符结尾,则$
可以在新行之前匹配空字符串,因此此处使用'z
来断言字符串的结尾。
测试代码
using System;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
string[] fail = {"ABCDacbd", "ACDE", "ABCDE'n", "_01234", "ABCDÉ", "ABCD́Ē", "ABCDEF_", "A_B_CDEF", "AB_C", "1234567890123456789012345", "123456_789012345678901234"};
string[] ok = {"ACBDEF", "01234", "ABC_DE1", "123456789012345678901234", "12345_789012345678901234"};
foreach (string s in fail) {
Console.WriteLine(s + " " + Validate(s));
}
Console.WriteLine();
foreach (string s in ok) {
Console.WriteLine(s + " " + Validate(s));
}
}
private static bool Validate(string str) {
if (str.Length < 5 || str.Length > 24) {
return false;
}
return Regex.IsMatch(str, @"^[A-Z0-9]+(?:_[A-Z0-9]+)?'z");
}
}