正则表达式 re.findall 以查找两边带有 space 的子字符串
regex re.findall to to find the substrings with space on both sides
我正在尝试在我的文本列中使用 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,它 WAR 期间我不想要那个
还有什么运算符可以在下标前面获取我想看到的所有内容,例如
['WAR', 'WARduring','CFO', 'CIO']
感谢每一个帮助
您可以使用前瞻:
>>> 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']
此处\w*
你的关键字将匹配0个或多个单词字符。
在您的正则表达式中使用单词边界 [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']
方法一:将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']
我正在尝试在我的文本列中使用 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,它 WAR 期间我不想要那个
还有什么运算符可以在下标前面获取我想看到的所有内容,例如
['WAR', 'WARduring','CFO', 'CIO']
感谢每一个帮助
您可以使用前瞻:
>>> 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']
此处\w*
你的关键字将匹配0个或多个单词字符。
在您的正则表达式中使用单词边界 [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']
方法一:将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']