正则表达式:第一个字符字母,第二个数字

时间:2019-04-09 05:33:44

标签: c# regex

这是我的字符串,始终以字母开头,后跟3位数字,然后是-(连字符),然后是3位数字,然后是字母,然后是4位数字

I123-123S1234N1234

我想出了一个很长的正则表达式!我该如何写一个更好的表达方式?

[a-zA-Z][0-9][0-9][0-9][-][0-9][0-9][0-9][a-zA-Z].........goes on

注意

  • 应支持不区分大小写
  • 连字符,SN始终不变

4 个答案:

答案 0 :(得分:3)

首先使用不区分大小写的标志,然后在重复标记时,使用{<number of times to repeat>}`而不是重复自己:

(?i)[a-z][0-9]{3}-[0-9]{3}[a-z][0-9]{4}

如果您也想匹配结尾的N1234,则将最后一个[a-z][0-9]{4}放在一组中,并重复两次:

(?i)[a-z][0-9]{3}-[0-9]{3}(?:[a-z][0-9]{4}){2}

https://regex101.com/r/5ra1eU/1

如果S和N是常数,则不要使用字符集来匹配它们,只需匹配普通字符即可:

(?i)[a-z][0-9]{3}-[0-9]{3}S[0-9]{4}N[0-9]{4}

https://regex101.com/r/5ra1eU/2

答案 1 :(得分:3)

尝试一下:

var testString = "I123-123S1234N1234";
var pattern = @"[A-Za-z]\d{3}-\d{3}[sS]\d{4}[nN]\d{4}";
var isMatch = Regex.Match(testString, pattern).Success;

使用的模式:[A-Za-z]\d{3}-\d{3}[sS]\d{4}[nN]\d{4}

说明:

[A-Za-z]-匹配任意字母

\d{3}-匹配三位数

[sS]-逐字匹配Ss

\d{4}-匹配四位数

[nN]-逐字匹配Nn

\d{4}-匹配四位数

答案 2 :(得分:2)

如果您确定具有大写字母以及S和N常数:

[A-Z]\d{3}-\d{3}S\d{4}N\d{4}

[A-Z]-匹配任何大写字母

\d{3}-匹配3位数字

S-从字面上匹配S

\d{4}-匹配4位数字

N-从字面上匹配N

\d{4}-匹配4位数字

如果需要大写和小写:

[a-zA-Z]\d{3}-\d{3}[Ss]\d{4}[Nn]\d{4}

(?i)[a-z]\d{3}-\d{3}s\d{4}n\d{4}

答案 3 :(得分:0)

这应该有效:

[a-zA-Z][0-9]{3}-[0-9]{4}[a-zA-Z][0-9]{4}