有没有一种方法可以缩短这个正则表达式?

3
以下正则表达式符合我的模式。但是,我想知道是否有一种方法可以缩短它。我不能使用\w,因为我只想要不区分大小写的英文字母。由于模式重复,我想知道是否可以将其分组(如果可能的话)。

([A-Za-z]{5}\.[A-Za-z]{3}\.[A-Za-z]{3}\.[A-Za-z]{3}\.[0-9]{3}\.[0-9]{2})\.([0-9]{8}\-[0-9]{6})\.csv

这是一个 JavaScript 正则表达式问题,我猜测?虽然它很普遍,但了解这一点仍然很有帮助。 - J0e3gan
2个回答

4
您可以将其简化为以下内容:
([A-Za-z]{5}(\.[A-Za-z]{3}){3}\.[0-9]{3}\.[0-9]{2})\.([0-9]{8}-[0-9]{6})\.csv

3

\d代替[0-9]是一种明显的缩短方式:

([A-Za-z]{5}\.[A-Za-z]{3}\.[A-Za-z]{3}\.[A-Za-z]{3}\.\d{3}\.\d{2})\.(\d{8}\-\d{6})\.csv

接下来,整合@anubhava指出的重复模式:
([A-Za-z]{5}\.([A-Za-z]{3}\.){3}\d{3}\.\d{2})\.(\d{8}\-\d{6})\.csv

在一开始设置不区分大小写将会进一步缩短正则表达式...

(?i)([a-z]{5}\.([a-z]{3}\.){3}\d{3}\.\d{2})\.(\d{8}\-\d{6})\.csv

同时匹配 .CSV 文件(与仅匹配小写的 .csv 文件相比),这可能是您没有考虑过但通常是有效的。

最后,有4个括号可能是多余和可放弃的:

(?i)[a-z]{5}\.([a-z]{3}\.){3}\d{3}\.\d{2}\.\d{8}\-\d{6}\.csv

3
最初,\d 确实是一个显而易见的想法,但它并不完全等同于 [0-9]。它包括更多字符:https://dev59.com/_GQn5IYBdhLWcg3wt5Ag#16621778 - cherouvim
@cherouvim:我通常不会对Unicode输入字符串运行正则表达式,但如果Unicode输入字符串是一个问题的话,那是一个合理的观点。 - J0e3gan
2
@cherouvim:这取决于编程语言。C#默认匹配Unicode数字,但Java和JavaScript不会。从Java 7开始,可以使用“(?U)”标志使“\d”匹配Unicode数字,但这是在使用标志后的情况。 - nhahtdh
这些是关于Unicode(和性能)考虑的重要观点。谢谢! - J0e3gan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接