Python使用正则表达式在特定单词列表前提取3个单词,在特定单词列表后提取3个单词

Python使用正则表达式在特定单词列表前提取3个单词,在特定单词列表后提取3个单词,python,regex,Python,Regex,我需要使用python来提取特定单词列表前的3个单词和后的3个单词 诺基亚Lumia 930智能手机,显示5 pollici,Fotocamera 20 MP,2GB RAM、Processore四核2.2GHz、内存32GB、Windows Phone 8.1、, 比安科[德国] 目前我正在使用这个正则表达式,但没有成功 ((?:[\S,]+\s+){0,3})ram\s+((?:[\S,]+\s*){0,3}) 我需要的单词列表是: 展示 荧光照相机 公羊 加工厂 记忆 您的正则表达式

我需要使用python来提取特定单词列表前的3个单词和后的3个单词

诺基亚Lumia 930智能手机,显示5 pollici,Fotocamera 20 MP,2GB RAM、Processore四核2.2GHz、内存32GB、Windows Phone 8.1、, 比安科[德国]

目前我正在使用这个正则表达式,但没有成功

((?:[\S,]+\s+){0,3})ram\s+((?:[\S,]+\s*){0,3})

我需要的单词列表是:

  • 展示
  • 荧光照相机
  • 公羊
  • 加工厂
  • 记忆

您的正则表达式无法工作,因为
\s+
至少需要1个空格,但在
RAM
之间,
没有空格。要么使用一个
*
量词,要么删除它并使用它``

(?i)((?:\S+\s+){0,3})\bRAM\b\s*((?:\S+\s+){0,3})

我添加了
\b
(单词边界)以确保我们匹配
RAM
,而不是
RAMBUS

注意
re.I
修饰符(或者在模式的开头使用内联版本
(?I)

其他模式也可以以类似的方式形成,只需用列表中的单词替换
RAM

((?:[\S,]+\s+){0,3})ram,?\s+((?:[\S,]+\s*){0,3})

                       ^^
只需添加一个
。请参阅演示

你最后可以用这个

((?:[\S,]+\s+){0,3})(?:ram|Display|Fotocamera|RAM|Processore|Memoria),?\s+((?:[\S,]+\s*){0,3})

你说提取物是什么意思?如果你能提供一个输入/输出的例子,它真的能帮助我们。那么,对你有用吗?提供你期望的输出。是的,它很有效。。。为什么((?:\S+\S+{0,3})RAM\S+((?:\S+\S*){0,3})不起作用?我需要一个接一个地指定列表中的项目。我知道你不需要替换版本,我只保留了一个可以一次使用的版本。是的,谢谢你,这个正则表达式似乎工作得很好。。。非常感谢你。。。在选择最佳答案之前,我正在测试另一个建议的解决方案(带逗号的方案):)谢谢亲爱的!请注意,
,?
表示1或0个逗号,但如果还有其他标点符号呢?我认为单词边界是这里的关键,空格应该是可选的。如果要匹配
ram
之后的任何非单词字符(可选),可以使用
\W*
而不是vks建议的
,?
。看见这看起来更一般。ram后面的逗号是什么意思?@usi您在输入字符串中有
,以便匹配您给出的
,?
是指
不存在的情况