如何使用Python从字符串中提取id、title等关键词对应的字段值
问题原因分析
你原来的find_title正则使用的贪婪匹配模式.*,会从第一个'title'出现的位置一直匹配到整个字符串末尾的最后一个逗号,无法正确截取每个title单独的内容。
解决代码
你可以使用更精准的正则匹配规则,按字段捕获对应值,也可以一次性匹配单条车辆的全量字段避免顺序错位,完整代码如下:
import re import pandas as pd # 读取文件内容 with open(r'C:\Users\xy\Desktop\xyz\test.txt', encoding = "ISO-8859-1") as f: html_text = f.read() # 定义单个字段的正则规则,()内为要提取的捕获组 id_list = re.findall(r"'id':\s*'(\d+)'", html_text) title_list = re.findall(r"'title':\s*'([^']+)'", html_text) url_list = re.findall(r"'url':\s*'([^']+)'", html_text) price_list = list(map(int, re.findall(r"'price':\s*(\d+)", html_text))) km_list = list(map(int, re.findall(r"'km':\s*(\d+)", html_text))) year_list = list(map(int, re.findall(r"'year':\s*(\d+)", html_text))) # 转为DataFrame df = pd.DataFrame({ 'id': id_list, 'title': title_list, 'url': url_list, 'price': price_list, 'km': km_list, 'year': year_list }) # 导出为CSV,如需导出Excel可以用df.to_excel() df.to_csv(r'C:\Users\xy\Desktop\xyz\车辆信息导出.csv', index=False, encoding='utf-8-sig')
规则说明
- 针对带单引号的字符串类型字段(id、title、url),使用
[^']+匹配单引号包裹的内容,避免贪婪匹配越界 - 针对数字类型字段(price、km、year),直接匹配数字即可,匹配后转成int类型方便后续处理
- 导出CSV时使用
utf-8-sig编码可以避免中文乱码问题
内容的提问来源于stack exchange,提问作者Georg Klippenstein
相关产品推荐
相关产品推荐

