2013-07-11 139 views
1

我想提取具有以下標籤的所有單詞"w="。例如,我需要從下面的字符串中輸入" THAT HAVE RECEIVED NO"從字符串中提取特定值

w="THAT" v="22.23092" a="19.09109" i="3"/> 
<r s="1480150" d="150" w="HAVE" v="20.66713" a="19.09183" i="3"/> 
<r s="1480300" d="360" w="RECEIVED" v="18.70063" a="19.09165" i="2"/> 
<r s="1480660" d="200" w="-SIL-" v="11.65527" a="19.09165" i="0"/> 
<r s="1480860" d="210" w="NO" v="18.49828" a="19.09137" i="2"/> 
<r s="1481070" d="4330" w="-S-" v="11.55029" a="19.09137" i="0"/> 
<r s="1485400" d="4170" w="-S-" v="11.88606" a="19.09137" i="0"/> 

我一直在嘗試使用下面的正則表達式:

matches = re.findall('(?<=[w][=])\w+',line) 

然而,它似乎並沒有工作。請幫忙。

+1

你不在正則表達式中包含引號。你的正則表達式匹配'w =',然後期望'\ w',這是一個字母數字字符。相反,它會得到一個''''。 –

回答

1

事情是這樣的:

>>> import re 
>>> re.findall(r'w="(\w+)"',strs,re.DOTALL) 
['THAT', 'HAVE', 'RECEIVED', 'NO'] 

然後使用str.join獲得一個字符串:

>>> " ".join(re.findall(r'w="(\w+)"',strs,re.DOTALL)) 
'THAT HAVE RECEIVED NO' 

其中strs是:

>>> print strs 
w="THAT" v="22.23092" a="19.09109" i="3"/> 
<r s="1480150" d="150" w="HAVE" v="20.66713" a="19.09183" i="3"/> 
<r s="1480300" d="360" w="RECEIVED" v="18.70063" a="19.09165" i="2"/> 
<r s="1480660" d="200" w="-SIL-" v="11.65527" a="19.09165" i="0"/> 
<r s="1480860" d="210" w="NO" v="18.49828" a="19.09137" i="2"/> 
<r s="1481070" d="4330" w="-S-" v="11.55029" a="19.09137" i="0"/> 
<r s="1485400" d="4170" w="-S-" v="11.88606" a="19.09137" i="0"/> 
0

你想要的東西更像

re.findall('(w=")([^"]*)(")', line)