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

2018-01-01 13:10:07 +08:00
 ohmyzsh

文本如下:

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

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

(product = re.findall(r"生产的(.*),", article) 为啥不对呢?)
2969 次点击
所在节点    Python
11 条回复
welkinzh
2018-01-01 13:21:17 +08:00
英文和中文之间有空格吧,还有逗号前面要加个反斜杠
radiocontroller
2018-01-01 13:34:28 +08:00
(.*?)这里加个问号(懒惰匹配)
ohmyzsh
2018-01-01 14:01:19 +08:00
@radiocontroller 多谢。
ohmyzsh
2018-01-01 14:04:02 +08:00
@welkinzh 哦,没有空格,按照 #2 的方法解决了
Xiaobaixiao
2018-01-02 17:40:32 +08:00
(?<=生产的).+(?=产品)
ohmyzsh
2018-01-03 09:33:50 +08:00
@Xiaobaixiao 试了下,您这个输出是空值
Xiaobaixiao
2018-01-03 13:15:36 +08:00
@ohmyzsh 结合 #1 #2 的 那就是:(?<=生产的\s)(.*?)(?=\s 产品)
ohmyzsh
2018-01-03 15:38:29 +08:00
@Xiaobaixiao 还是空值😅
ohmyzsh
2018-01-03 15:39:18 +08:00
@Xiaobaixiao 生产的(.*?),

#2 的这个可以
Xiaobaixiao
2018-01-03 16:36:09 +08:00
@ohmyzsh 不会吧……
>>> article='''A 公司生产的 aa 产品,B 公司生产的 bb 产品,C 公司生产的 cc 产
品'''
>>> re.findall('(?<=生产的\s)(.*?)(?=\s 产品)',article)
['aa', 'bb', 'cc']
ohmyzsh
2018-01-04 11:31:48 +08:00
@Xiaobaixiao 把 re.findall('(?<=生产的\s)(.*?)(?=\s 产品)',article) 产品前的空格去掉可以了,多谢回复,新年好!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/419134

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX