.NET正则表达式,用于相对简单的字符串格式

时间:2011-10-09 13:17:31

标签: .net regex

我正在尝试为以下内容构建正则表达式:

  • 完全符合6个字符
  • 仅限字母数字字符
  • 字母都是大写的
  • 开头有1个,3个,4个或5个字母,其余字母必须为数字

我该怎么做?

6 个答案:

答案 0 :(得分:5)

以下是我如何编写它(在自由间隔模式下使用C#):

if (Regex.IsMatch(text, @"
    # Match specific string with multiple requirements.
    ^                      # Anchor to start of string.
    (?=.{6}$)              # 6 characters exactly.
    (?:                    # There are exactly
      [A-Z]{3,5}           # 3, 4, 5 or
    | [A-Z]                # 1, uppercase letters
    )                      # at the beginning,
    [0-9]+                 # the rest must be numbers.
    $                      # Anchor to end of string.", 
    RegexOptions.IgnorePatternWhitespace)) {
    // Successful match
} else {
    // Match attempt failed
} 

编辑:从PHP更改为C#/。NET语法。

答案 1 :(得分:2)

我更喜欢使用正则表达式来获得更多的humaa可读性

var input = "ABC456";
return input.Length==6 && Regex.IsMatch(input,@"^([A-Z]|[A-Z]{3,5})\d+$");

答案 2 :(得分:2)

退位

定义重构
- 总共6个字符,大写字母和数字字符 - 首先必须是一个字母,最后一个数字 - 首字母可选地后跟2到4个字母

方法1

^(?=.{6}$)[A-Z](?:[A-Z]{2,4})?\d+$

(扩展)

^
(?= .{6} $ )
[A-Z] (?:[A-Z]{2,4})? \d+ $ 

方法2

^(?=[A-Z](?:(?<!\d)[A-Z]|\d){4}\d$)[A-Z](?:[A-Z]{2,4})?\d

(扩展)

^
(?= [A-Z] (?: (?<!\d)[A-Z] | \d ){4} \d $ )
[A-Z] (?:[A-Z]{2,4})? \d

方法2不需要结束锚,因为断言是长度和结束特定的,但是由于后视(由于OP的条件)而使得看起来缓慢/麻烦。

出于这个原因,我会使用方法1正则表达式,虽然我相信另一个会得到更好的速度工作台,这可能是在这种情况下代码清晰度的无关紧要。

答案 3 :(得分:1)

^[A-Z](([A-Z]{2}[0-9]{3})|([A-Z]{3}[0-9]{2})|([A-Z]{4}[0-9]{1})|([0-9]{5}))$

更新:现在符合所有要求

答案 4 :(得分:1)

^([A-Z]\d{5})|([A-Z]{3}\d{3})|([A-Z]{4}\d{2})|([A-Z]{5}\d)$

答案 5 :(得分:0)

这应该是我的头脑。可能会有更短的更优雅的版本..

bool foundMatch = false;
try {
    foundMatch = Regex.IsMatch(subjectString, @"\A(?:(?:[A-Z]\d{5})|(?:[A-Z]{3}\d{3})|(?:[A-Z]{4}\d{2})|(?:[A-Z]{5}\d))\Z");
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}