C# 将限制设置为正则表达式的长度

C# 将限制设置为正则表达式的长度,c#,regex,C#,Regex,行应为: 从拉丁字母开始 由拉丁字母、数字、点符号和减号- 字符串应以字母数字结尾 行的最小长度为1 行的最大长度为20 我编写了以下Regex模式: string pattern = @"^[A-Za-z]{1}[A-Za-z0-9\-\.]{1,18}[A-Za-z0-9]{1}$"; 第三、第四、第五个条件不满足: string s1 = "E"; // Compare a string against the regular expression var isOK = ne

行应为:

  • 从拉丁字母开始
  • 由拉丁字母、数字、点符号
    和减号
    -
  • 字符串应以字母数字结尾
  • 行的最小长度为1
  • 行的最大长度为20
我编写了以下
Regex
模式:

string pattern = @"^[A-Za-z]{1}[A-Za-z0-9\-\.]{1,18}[A-Za-z0-9]{1}$";
第三、第四、第五个条件不满足:

string s1 = "E";   

// Compare a string against the regular expression
var isOK = new Regex(pattern).IsMatch(s1);

你能告诉我创建正则表达式模式的正确方法吗?

试试下面的方法:

^[A-Za-z]([-.A-Za-z0-9]{0,18}[A-Za-z0-9])?$
它将首先匹配单个字母字符,然后可选地匹配一系列多达18个字母、数字、句点或连字符,以字母数字结尾。如果愿意,可以在character类中转义连字符,但如果不转义,则应将其作为类中的第一个字符,以便不将其解释为范围。使连字符成为类中的最后一个字符对于某些实现是有效的

您可以使用

string pattern = @"^[A-Za-z][A-Za-z0-9.-]{0,19}(?<=[A-Za-z0-9])$";

string pattern=@“^[A-Za-z][A-Za-z0-9.-]{0,19}(?您似乎还有一个条件,字符串应该以字母数字结尾。给定模式的最小长度为3。第二个表达式的最小值应该为0。不确定最终表达式是什么。请尝试
string pattern=@[A-Za-z][A-Za-z0-9.-{0,19}(?@WiktorStribiżew谢谢,但第二个条件不满足(包括拉丁字母、数字、点符号
和减号
-
)Wy不允许?它确实允许它们。你能用例子说明一下吗?注意:你可以在字符串结束锚之后移动lookback,以便在不匹配的字符串中获得更好的性能。很抱歉,我不明白如何在字符串结束后移动lookback,以便获得更好的性能。请你举个例子。
@“^[A-Za-z][A-Za-z0-9.-]{0,19}\z(?非常感谢您这么好的回答!理解您所写的内容非常简单。谢谢:)。
string pattern= @"^[A-Za-z][A-Za-z0-9.-]{0,19}\z(?<=[A-Za-z0-9])";