Python 如何使用正则表达式提取中间文本

文本如下:

A 公司生产的 aa 产品,B 公司生产的 bb 产品,C 公司生产的 cc 产品,...

用 Python 该怎么把所有的产品名称( aa、bb、cc 等)提取出来保存为列表呢?谢谢!

(product = re.findall(r"生产的(.*),", article) 为啥不对呢?)

Python 如何使用正则表达式提取中间文本
12 回复

英文和中文之间有空格吧,还有逗号前面要加个反斜杠


import re

# 方法1:使用分组捕获中间内容
text = "前缀需要的内容后缀"
pattern = r"前缀(.*?)后缀"
result = re.search(pattern, text)
if result:
    print(result.group(1))  # 输出:需要的内容

# 方法2:使用环视断言(更灵活)
text2 = "开始提取这部分结束"
pattern2 = r"(?<=开始).*?(?=结束)"
result2 = re.findall(pattern2, text2)
print(result2)  # 输出:['提取这部分']

# 实际案例:提取HTML标签内容
html = '<div class="title">Python教程</div>'
html_pattern = r'<div[^>]*>(.*?)</div>'
html_result = re.search(html_pattern, html)
if html_result:
    print(html_result.group(1))  # 输出:Python教程

# 处理多行文本(使用re.DOTALL标志)
multiline_text = """开始
这是多行
内容
结束"""
multiline_pattern = r"开始(.*?)结束"
multiline_result = re.search(multiline_pattern, multiline_text, re.DOTALL)
if multiline_result:
    print(multiline_result.group(1).strip())

用分组或环视来抓你要的文本。

(.*?)这里加个问号(懒惰匹配)

多谢。

哦,没有空格,按照 #2 的方法解决了

(?<=生产的).+(?=产品)

试了下,您这个输出是空值

结合 #1 #2 的 那就是:(?<=生产的\s)(.*?)(?=\s 产品)

还是空值😅

生产的(.*?),

#2 的这个可以

不会吧……
>>> article=’’‘A 公司生产的 aa 产品,B 公司生产的 bb 产品,C 公司生产的 cc 产
品’’’
>>> re.findall(’(?<=生产的\s)(.*?)(?=\s 产品)’,article)
[‘aa’, ‘bb’, ‘cc’]

把 re.findall(’(?<=生产的\s)(.*?)(?=\s 产品)’,article) 产品前的空格去掉可以了,多谢回复,新年好!

回到顶部