什么时候我们应该在正则表达式中使用组?这里真正的优势是什么?

2024-09-30 06:24:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个正则表达式。两者都匹配美国日期格式。以下是(我重点介绍了我谈论的小组):

^(.*?)((0|1)?\d)-((0|1|2|3)?\d)-**(19|20\d\d)**(.*?)$

^(.*?)((0|1)?\d)-((0|1|2|3)?\d)-**((19|20)\d\d)**(.*?)$

两场比赛:

asasa12-12-1993.txt
asassa12-12-2010.txt

在这本书中,他把19 | 20分为自己的一组。为什么?


Tags: txt重点格式小组asasa12asassa12
2条回答

我最好的猜测是人类更容易解析

第一个((19|20\d\d))并不表明交替是“19还是20\d\d”,而在((19|20)\d\d)中,很明显它是“1920,然后是\d\d

AKX几乎是对的,但不仅仅如此

19|20\d\d将匹配1920 followed by 2 digits

但它将不匹配^{

看看这里:https://regex101.com/r/lvYGUb/3

您将看到2010是单个匹配,而19是单独匹配的,没有93,因此93与.txt组匹配,这可能不是您想要的

以类似的方式,考虑这个数据文件:

20 euros
20 €

假设您希望使用正则表达式100%匹配这两行

\d+ euros|€不起作用,因为它表示a number followed by the word eurosjust the € sign alone

但是

\d+ (euros|€)将起作用

因此,这里括号的目的不是捕获组,它们只是为OR运算符设置边界

如果不希望这些括号捕获组,可以添加?:使其成为非捕获组,如下所示:

^(.*?)((0|1)?\d)-((0|1|2|3)?\d)-((?:19|20)\d\d)(.*?)$

相关问题 更多 >

    热门问题