Python正则表达式在特定单词后获取多行

标签 python regex loops string-matching

字符串存储在变量文本中。 当我执行 print(text) 时,我得到输出:

SHIP TO
Flensburg House, MMDA Colony,
Arumbakkam,Chennai, Tamil Nadu,

我需要获取文本:

Flensburg House, MMDA Colony,
Arumbakkam,Chennai, Tamil Nadu,

这是我尝试过的:

shipto=[]
shipto_re=re.compile(r"SHIP TO((?:.*\n){1,3})")
for line in text.split():
      if shipto_re.match(line):
        shipto.append(line)

但是,这并没有给我匹配,我知道正则表达式可以工作,所以问题肯定在于如何迭代文本变量。

最佳答案

您正在使用跨行匹配的正则表达式,但您使用空格分割字符串,并针对正则表达式测试每个分割“标记”。

您需要使用

import re
text = r'''SHIP TO
Flensburg House, MMDA Colony,
Arumbakkam,Chennai, Tamil Nadu,
'''
shipto_re=re.compile(r"SHIP TO((?:.*\n){1,3})")
shipto = [x.strip() for x in shipto_re.findall(text)]
print(shipto)
# => ['Flensburg House, MMDA Colony,\nArumbakkam,Chennai, Tamil Nadu,']

请参阅Python demo .

这里,Pattern.findall 用于从匹配项中提取第 1 组值,并且使用 str.strip() 去除每个匹配项的任何前导和尾随空格。 .

更多注意事项

如果您打算匹配一行,即使它位于字符串末尾,您也需要将正则表达式替换为

shipto_re=re.compile(r"SHIP TO(.*(?:\n.*){0,2})")

SHIP TO(.*(?:\n.*){0,2})SHIP TO 匹配,然后将所有文本捕获到第 1 组中,直到结束当前行,然后是零个、一个或两个换行符 (LF) 字符序列,然后是该行的其余部分(使用 (.*(?:\n.*){0,2})).

关于Python正则表达式在特定单词后获取多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73032467/

相关文章:

regex - R中的正则表达式括号之谜

javascript - 循环更多CPU友好的Js

python - 使用 AWS Secrets Manager 连接到 Postgres 数据库

python - 从包含 key=value 的字符串构建字典

python - Pandas 时间序列 : Keep only one value peer week and id

regex - 如何使用 grep 提取目录和子目录中所有文件中包含的所有 IP 地址?

regex - PowerShell 在匹配后检索 3 个字符

python - 一个接一个地遍历两个列表

c++ - 为什么这不是 C/C++ 中的无限循环

python - sudo easy_install pip 不工作