我正在尝试在我的文本列上使用re.findall来查找以下任何一侧的空格,因为那是唯一重要的。我正在使用以下脚本
url = '#MnA deals for 2015 across all #oilandgas sectors were lower than WAR WARduring the CFO Great CIO Recession'
regex=re.findall(r'WAR|CIO|CISO|CTO|C-Suite|CMO|CFO|Founder+',url)
print regex
['WAR', 'WAR', 'CFO', 'CIO']
而不是这个我只想要
['WAR', 'CFO', 'CIO']
自从第二次不仅仅是WAR,它的WARduring,我不想要那个
还有什么操作员可以在下标前面看到我想看的所有内容,比如
['WAR', 'WARduring','CFO', 'CIO']
感谢每一个帮助
答案 0 :(得分:2)
您可以使用前瞻:
>>> re.findall(r'\b(?:WAR|CIO|CISO|CTO|C-Suite|CMO|CFO|Founder+)(?=\s|$)', url)
['WAR', 'CFO', 'CIO']
(?=\s|$)
会在您的关键字后声明存在空格或行尾。
对于第二项任务,请使用此正则表达式:
>>> re.findall(r'\b((?:WAR|CIO|CISO|CTO|C-Suite|CMO|CFO|Founder+)\w*)', url)
['WAR', 'WARduring', 'CFO', 'CIO']
在您的关键字匹配0个或更多单词字符后,\w*
。
答案 1 :(得分:2)
在正则表达式中使用单词边界 [Know more]将解决您的问题
正则表达式
\b(?:WAR|CIO|CISO|CTO|C-Suite|CMO|CFO|Founder+)\b
代码
url = '#MnA deals for 2015 across all #oilandgas sectors were lower than WAR WARduring the CFO Great CIO Recession'
regex=re.findall(r'\b(WAR|CIO|CISO|CTO|C-Suite|CMO|CFO|Founder+)\b',url)
print regex
['WAR', 'CFO', 'CIO']
答案 2 :(得分:2)
方法1:错误地将WAR检测为WAR
另一种方法:使用\ b来分隔单词
regex=re.findall(r'\b(WAR|CIO|CISO|CTO|C-Suite|CMO|CFO|Founder)\b',url)
url = '#MnA deals for 2015 across all #oilandgas theWAR sectors were lower than WAR WARduring the CFO Great CIO'
regex=re.findall(r'(WAR|CIO|CISO|CTO|C-Suite|CMO|CFO|Founder+)(?=\s|$)', url) # bug with start of word
print regex
regex=re.findall(r'\b(WAR|CIO|CISO|CTO|C-Suite|CMO|CFO|Founder)\b',url)
print regex
['WAR', 'WAR', 'CFO', 'CIO']
['WAR', 'CFO', 'CIO']