2016-06-16 23 views
0

テキスト列にre.findallを使用して、次のいずれかをスペースで検索しようとしています。 2回目のだけではなく、WAR、そのWARduringと私はそのregex re.findallを使って両側に空白文字を含む部分文字列を見つけよう

もが何だろうしたくないので、私は私だけ

['WAR', 'CFO', 'CIO'] 

を望んでいた、これに代えて、次のスクリプト

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', 'WARduring','CFO', 'CIO'] 

が電子に感謝のように、私は添字の前で見てみたいすべてのものを得るためにオペレータも

>>> re.findall(r'\b(?:WAR|CIO|CISO|CTO|C-Suite|CMO|CFO|Founder+)(?=\s|$)', url) 
['WAR', 'CFO', 'CIO'] 

(?=\s|$)キーワードの後に​​空白文字や線の端の存在を主張します:非常にあなたが先読みを使用することができます

+0

'Founder +'の '+'はリテラル '+'ですか? –

答えて

2

を助けます。第二タスク用の

この正規表現:キーワードの後

>>> re.findall(r'\b((?:WAR|CIO|CISO|CTO|C-Suite|CMO|CFO|Founder+)\w*)', url) 
['WAR', 'WARduring', 'CFO', 'CIO'] 
ここ

\w*は0以上の単語文字に一致します。あなたの正規表現でワード境界 [Know moreを使用して

+1

@ anubhava-それは本当に働いて、ありがとう –

2

]あなたの問題を解決します

正規表現

\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

方法1:誤ってWAR

としてtheWARを検出し、別の方法それを実行する:\ 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'] 
関連する問題