字符串存储在变量文本中。 当我执行 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/