2013-04-29 91 views
0

我想知道如何找到slach和括號或']之間的字符串,例如。從斜槓查找字符串到空格或字符

data = "(AVP:SMTP/[email protected]) R:AVP:SMS.0/+44648474 id:24" 
data2 = "(AVP:SMTP/<[email protected]>) R:AVP:FAX.0/<thisword> id:25" 

SI的想法是隻得到[email protected]+44648474用於爲data2


第一data[email protected]thisword我試過這個表達式:


k = re.findall(r"/(\S+)",data2) 

但它返回<[email protected]>)<thisword>


和我想得是[email protected]thisword

+0

如果你輸入的子字符是'/ <[email protected]>)',並且你想要斜槓和括號之間的所有內容,顯然這將包括'<' and '>';如果你想排除這些,你需要在正則表達式中這樣做。 – 2013-04-29 13:00:07

回答

1

這一個工程。

import re 

data = "(AVP:SMTP/[email protected]) R:AVP:SMS.0/+44648474 id:24" 
data2 = "(AVP:SMTP/<[email protected]>) R:AVP:FAX.0/<thisword> id:25" 

regex = re.compile(r"/<?([^>\s\)]+)") 

print regex.findall(data) 
print regex.findall(data2) 

>>> 
['[email protected]', '+44648474'] 
['[email protected]', 'thisword'] 

此正則表達式崩潰:

  • /:在/字符。
  • <?:optionaly a < character。開始捕獲組。 (空格)或)
  • ):關閉捕獲組。
+0

偉大的解釋許多感謝! – 2013-04-29 13:17:27

1

您可以通過使用lookaround assertions排除這樣的分隔符:

k = re.findall(r"(?<=/<)[^>]+(?=>)",data2) 

這將確保「/<」在比賽前,比賽那麼一切,是不是「>」至少一次,並取得成功時,有一個比賽結束後「>」。

+0

謝謝,但是當<>之間有一個單詞時,它找不到第二個單詞..無論如何,Inbar Rose的解決方案非常感謝您的幫助 – 2013-04-29 13:11:31