次のようなエントリを含むテキストファイルがあります。
@markwarner VIRGINIA - Mark Warner
@senatorleahy VERMONT - Patrick Leahy NO
@senatorsanders VERMONT - Bernie Sanders
@orrinhatch UTAH - Orrin Hatch NO
@jimdemint SOUTH CAROLINA - Jim DeMint NO
@senmikelee UTAH -- Mike Lee
@kaybaileyhutch TEXAS - Kay Hutchison
@johncornyn TEXAS - John Cornyn
@senalexander TENNESSEE - Lamar Alexander
正規表現を使用して「NO」とダッシュを削除するために、次のように記述しました。
import re
politicians = open('testfile.txt')
text = politicians.read()
# Grab the 'no' votes
# Should be 11 entries
regex = re.compile(r'(no\s@[\w+\d+\.]*\s\w+\s?\w+?\s?\W+\s\w+\s?\w+)', re.I)
no = regex.findall(text)
## Make the list a string
newlist = ' '.join(no)
## Replace the dashes in the string with a space
deldash = re.compile('\s-*\s')
a = deldash.sub(' ', newlist)
# Delete 'NO' in the string
delno = re.compile('NO\s')
b = delno.sub('', a)
# make the string into a list
# problem with @jimdemint SOUTH CAROLINA Jim DeMint
regex2 = re.compile(r'(@[\w\d\.]*\s[\w\d\.]*\s?[\w\d\.]\s?[\w\d\.]*?\s+?\w+)', re.I)
lst1 = regex2.findall(b)
for i in lst1:
print i
コードを実行すると、Twitterのハンドル、状態、およびJimDeMintの名前以外のフルネームがキャプチャされます。正規表現の場合は無視したいと述べました。
何か案は?式がこの名前をキャプチャしないのはなぜですか?