这是我的字符串,始终以字母开头,后跟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
注意
S
和N
始终不变答案 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}
答案 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]
-逐字匹配S
或s
\d{4}
-匹配四位数
[nN]
-逐字匹配N
或n
\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}