所以我已经研究了几天了,这就是我正在寻找的东西和我现在拥有的正则表达式。我有一个这种格式的文件(还有一些其他字段,但我省略了这些:
我只想匹配粗体文本
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+(.*)
让我们划一条线 - ADDR 1 - XXXXXX ADDR 1 - ABCDEF
.*ADDR
将匹配ADDR 1 - XXXXXX ADDR。由于.*
匹配任何内容,并且本质上正则表达式是贪婪的,因此为了阻止我在.*
之后添加 \s+1\s+-\s+(.*)
将匹配其余部分 1 - ABCDEF。\s+1\s+-\s+
是必需的,因为我们需要匹配 ADDR 1 而不是 ADDR 2。(.*)
将匹配 ABCDEF 并存储它。
ADDR
关于python正则表达式在多行和所有其他匹配之间进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39497375/