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) 产品前的空格去掉可以了,多谢回复,新年好!

