gpt4 book ai didi

python - 如何: Overlapping match

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:34 25 4
gpt4 key购买 nike

假设我们有这个:

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

最佳答案

您可以为此使用先行并在先行中捕获值:

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.']

关于python - 如何: Overlapping match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40723932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com