python正则表达式在多行和所有其他匹配之间进行匹配

标签 python regex

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

我只想匹配粗体文本

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+(.*) 将匹配其余部分 1 - ABCDEF\s+1\s+-\s+ 是必需的,因为我们需要匹配 ADDR 1 而不是 ADDR 2(.*) 将匹配 ABCDEF 并存储它。

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

相关文章:

python - astropy 适合多个 header

R正则表达式: how to extract elements that contains two character in a certain order?

python - 用于将 Python 多行字符串与转义字符匹配的正则表达式

python - 抓取YouTube channel 的前一天视频-bs4

Python Selenium : Block-Title is not properly verified.(Magento 云)

python - Pandas:时间转换器独立工作,但在读取 csv 文件时不工作

python - 在追加模式下加载使用 numpy.save 保存的数组

正则表达式浏览器搜索?

python - 使用 python 3.4 使用正则表达式获取多个关键字

regex - 两个看似相同的 sed 命令,一个有效,另一个无效。你能告诉我为什么吗?