正则表达式开头的可选匹配组始终为空

2024-10-02 14:15:55 发布

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

我有一个字符串asd@12A/AXB25017/12A@£££,我想从中提取12A/AXB25017/12A

我设计了一个regexp模式,如下所示

'.*(([A-Z0-9]+/)?[A-Z]{3}\d+(/[A-Z0-9]+)?)'

因为我可以有很多不同的字符串变体。我想提取的不同字母和数字的有效字符串变体可以是

1) AXB25017
2) 1/AXB25017
3) AXB25017/1
4) 1A/AXB25017
5) AXB25017/1A
6) EN/AXB25017
7) EN/AXB25017/1

当我这样做的时候

 re.match('.*(([A-Z0-9]+/)?[A-Z]{3}\d+(/[A-Z0-9]+)?)','  @12A/AXB25017/12A@').group(1)

它没有找到初始的12A/,但返回AXB25017/12A

我在模式中还缺少什么来正确捕捉12A/


Tags: 字符串rematch字母模式group数字变体
1条回答
网友
1楼 · 发布于 2024-10-02 14:15:55

正则表达式中的第一个可选部分([A-Z0-9]+/)?不匹配,因为

  • 它是可选的
  • 前面的“match all”子表达式完全匹配

在正则表达式中包含分隔符:

.*\@(([A-Z0-9]+/)?[A-Z]{3}\d+(/[A-Z0-9]+)?)

如果有可能在第二个分隔符后面添加材料,请将其添加到正则表达式中

.*\@(([A-Z0-9]+/)?[A-Z]{3}\d+(/[A-Z0-9]+)?)\@

。。。这可能会大大简化:

\@[^@]+\@

相关问题 更多 >

    热门问题