Regex 这个正则表达式可以改进吗?

Regex 这个正则表达式可以改进吗?,regex,c#-3.0,Regex,C# 3.0,我有一个正则表达式来匹配用户输入的id,该id的基本格式为[a-zA-z]{2}[\d]{8},但最重要的是可以在id中的任何字母或数字之间放置一个空格,因此我的正则表达式如下所示 [A-Za-z]+[\s]*[A-Za-z]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]* 这显然是一种可憎的东西,应该用火杀死,这能改进吗 以下所有内容均为有效输入 a b 1 2 2 3

我有一个正则表达式来匹配用户输入的id,该id的基本格式为
[a-zA-z]{2}[\d]{8}
,但最重要的是可以在id中的任何字母或数字之间放置一个空格,因此我的正则表达式如下所示

[A-Za-z]+[\s]*[A-Za-z]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*
这显然是一种可憎的东西,应该用火杀死,这能改进吗

以下所有内容均为有效输入

a b 1 2 2 3 4 5 5 6
ab12345678
ab 12345678
可以替换为

\s*(?:\d+\s*){8}
(此外,您可以只编写
\s
,而不是
[\s]
,也可以编写
\d
而不是
[\d]
——如果只指定一个反斜杠字符类,则括号是多余的。)

编辑由于对替换原始正则表达式的哪一部分似乎有一些混淆,以下是替换后的整个表达式:

[A-Za-z]+\s*[A-Za-z]+\s*(?:\d+\s*){8}
可以替换为

\s*(?:\d+\s*){8}
(此外,您可以只编写
\s
,而不是
[\s]
,也可以编写
\d
而不是
[\d]
——如果只指定一个反斜杠字符类,则括号是多余的。)

编辑由于对替换原始正则表达式的哪一部分似乎有一些混淆,以下是替换后的整个表达式:

[A-Za-z]+\s*[A-Za-z]+\s*(?:\d+\s*){8}

您的正则表达式不符合您的规范,数字前是否可以有2个或更多字母?是否有8位数或8位数或更多

试一试

如果每个字符之间只能有一个空格:

([a-zA-Z]\s?){2}(\d\s?){8}

您的正则表达式不符合您的规范,数字前是否可以有2个或更多字母?是否有8位数或8位数或更多

试一试

如果每个字符之间只能有一个空格:

([a-zA-Z]\s?){2}(\d\s?){8}

永远不要使用
\d
\s
,除非您确切知道要去哪里

\d
将与09E6匹配০ 孟加拉数字零০ 是您的数字:-))。比如读

\s
将匹配更多类型的奇怪空格(以及制表符),这超出了您的计算范围,我不是在开玩笑

自相矛盾的是,使用[a-zA-Z]你在很大程度上限制了你的用户。。。没有,也没有土耳其语和(第一个是没有点的i,小写,第二个是i的大写版本)。 也许您可以使用
(\p{L}\p{M}*)
(带括号)而不是
[A-Za-z]
(所有字母加上组合标记)。必须在右括号后加*或+号。一个表达式表示单个字母及其组合符号


哦。。。您可以使用其他建议之一作为正则表达式的基础:-)

永远不要使用
\d
\s
,除非您确切知道要去哪里

\d
将与09E6匹配০ 孟加拉数字零০ 是您的数字:-))。比如读

\s
将匹配更多类型的奇怪空格(以及制表符),这超出了您的计算范围,我不是在开玩笑

自相矛盾的是,使用[a-zA-Z]你在很大程度上限制了你的用户。。。没有,也没有土耳其语和(第一个是没有点的i,小写,第二个是i的大写版本)。 也许您可以使用
(\p{L}\p{M}*)
(带括号)而不是
[A-Za-z]
(所有字母加上组合标记)。必须在右括号后加*或+号。一个表达式表示单个字母及其组合符号


哦。。。您可以使用其他建议之一作为正则表达式的基础:-)

还请注意开头的两个字符的
[a-zA-Z]
,它对我使用完全相同的站点很有效。。。再试一次?请注意,我所说的可以替换的部分并不是完整的原始表达式。同时请注意开头的两个字符的
[a-zA-Z]
,它对我使用完全相同的站点有效。。。再试一次?请注意,我所说的可以替换的部分并不是完整的原始表达。这是我刚刚想到的,也是我正在寻找的,谢谢!这是我刚刚想到的,也是我一直在寻找的,谢谢!改进它的最好方法是停止只使用ASCII码。他死了。不要只写ASCII正则表达式。@tchrist:ASCII没有死;在很多应用程序中,非ASCII字符肯定是不需要的,这是非常有意的。没有上下文的盲目说教是没有用的。@Amber:我强烈反对。如果它是纯ASCII数据,则符合Unicode的正则表达式在ASCII上的行为不会有所不同。除了提高可读性、表达性、灵活性和可维护性之外,添加Unicode遵从性对ASCII正则表达式没有任何作用。但是,只有ASCII的正则表达式将在Unicode数据上中断。当您不符合包含特定八位字节的RFC时,没有理由只编写ASCII正则表达式。介意分享一些信息而不是向ASCII倾诉死亡吗?在我的例子中,所有的数据都是ASCII格式的,但是你可以帮助未来的读者,而不是仅仅举起你的火炬和干草叉去追赶ASCII正则表达式的用户。改进它的最好方法是停止只使用ASCII格式。他死了。不要只写ASCII正则表达式。@tchrist:ASCII没有死;在很多应用程序中,非ASCII字符肯定是不需要的,这是非常有意的。没有上下文的盲目说教是没有用的。@Amber:我强烈反对。如果它是纯ASCII数据,则符合Unicode的正则表达式在ASCII上的行为不会有所不同。除了提高可读性、表达性、灵活性和可维护性之外,添加Unicode遵从性对ASCII正则表达式没有任何作用。但是,只有ASCII的正则表达式将在Unicode数据上中断。当您不符合包含特定八位字节的RFC时,没有理由只编写ASCII正则表达式。介意分享一些信息而不是向ASCII倾诉死亡吗?在我的例子中,所有的数据都将是ASCII码,但你可以帮助未来的读者,而不仅仅是举起你的火炬和干草叉去阅读