gpt4 book ai didi

多行之间的python正则表达式匹配和每一个其他匹配

转载 作者:行者123 更新时间:2023-11-28 22:33:52 25 4
gpt4 key购买 nike

所以我已经研究了几天,这就是我正在寻找的东西和我现在拥有的正则表达式。我有一个这种格式的文件(还有一些其他字段,但我省略了那些:

我只想匹配加粗的文字

ADDR 1 - XXXXXX   ADDR 1 - **XXXXXX**

ADDR 2 - XXXXXX ADDR 2 - XXXXXX

ADDR 1 - XXXXXX ADDR 1 - **XXXXXX**

ADDR 2 - XXXXXX ADDR 2 - XXXXXX

我编写的正则表达式只匹配第一个 ADDR 1 - XXXXX,但我需要匹配粗体 XXXXX 的所有实例。

re.findall(r'ADDR 1- .*? ADDR 1-(.*?)(?=ADDR 2-)', lines, re.DOTALL)

有什么建议吗?我觉得我可能遗漏了一些简单但不确定的东西。

最佳答案

代码:

import re

str= """
ADDR 1 - XXXXXX ADDR 1 - ABCDEF

ADDR 2 - XXXXXX ADDR 2 - XXXXXX

ADDR 1 - XXXXXX ADDR 1 - UVWXYZ

ADDR 2 - XXXXXX ADDR 2 - XXXXXX
"""

m = re.findall(r".*ADDR\s+1\s+-\s+(.*)",str)
print m

输出:

C:\Users\dinesh_pundkar\Desktop>python c.py
['ABCDEF', 'UVWXYZ']

C:\Users\dinesh_pundkar\Desktop>

工作原理:

.*ADDR\s+1\s+-\s+(.*)

Regular expression visualization

Debuggex Demo

让我们画一条线 - ADDR 1 - XXXXXX ADDR 1 - ABCDEF

  • .*ADDR 将匹配 ADDR 1 - XXXXXX ADDR。由于 .* 匹配任何东西,正则表达式本质上是贪婪的,所以为了停止,我在 .*
  • 之后添加了 ADDR
  • \s+1\s+-\s+(.*) 将匹配 rest 1 - ABCDEF\s+1\s+-\s+ 是必需的,因为我们需要匹配 ADDR 1 而不是 ADDR 2(.*) 将匹配 ABCDEF 并存储它。

关于多行之间的python正则表达式匹配和每一个其他匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39497375/

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