如何:重叠匹配

2024-04-19 18:42:26 发布

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

假设我们有:

A2 A1 B.         #1

A1 B.            #2

A3 A1 A8 B.      #3

如果我想:

  1. 匹配:A2 A1 B.A1 B.
  2. 匹配:A1 B.
  3. 匹配:A3 A1 A8 B.A1 A8 B.A8 B.

到目前为止我已经有了这个正则表达式:

A\d\s(.*\.)

但是它不会匹配已经匹配的代码子集(我正在使用re.finditer进行匹配)/我的猜测是re.finditer正在做它应该做的事情,我只是想强迫它做一些愚蠢的事情。你知道吗

Playground


Tags: 代码rea2a1事情子集a3playground
1条回答
网友
1楼 · 发布于 2024-04-19 18:42:26

您可以对此使用lookahead并捕获lookahead中的值:

regex = r"(?=((?:A\d+\s+)+B\.))"

RegEx Demo

正则表达式描述:

(?=               # start lookahead
   (              # start capturing group #1
      (?:         # start non-capturing group
         A\d+\s+  # match A followed by 1 or more digit followed by 1 or more whitespace
      )           # end non-capturing group
      +B\.        # match B and literal DOT
   )              # end capture group #1
)                 # end lookahead

代码:

>>> regex = r"(?=((?:A\d+\s+)+B\.))"

>>> print re.findall(regex, 'A2 A1 B.')
['A2 A1 B.', 'A1 B.']

>>> print re.findall(regex, 'A1 B.')
['A1 B.']

>>> print re.findall(regex, 'A3 A1 A8 B.')
['A3 A1 A8 B.', 'A1 A8 B.', 'A8 B.']

相关问题 更多 >