从斜杠到空格或字符的字符串

时间:2013-04-29 12:57:21

标签: python regex findall

我想知道如何找到一个在slach和一个括号之间的字符串或']',例如。

data = "(AVP:SMTP/xx@xx.xx) R:AVP:SMS.0/+44648474 id:24"
data2 = "(AVP:SMTP/<xxx@xx.xx>) R:AVP:FAX.0/<thisword> id:25"

我的想法是仅为xx@xx.xx获取+44648474data,为xx@xx.xx获取thisworddata2


我试过这个正则表达式:


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

但它会返回<xxx@xx.xx>)<thisword>


我想要的是 xx@xx.xx thisword

2 个答案:

答案 0 :(得分:1)

这个有效。

import re

data = "(AVP:SMTP/xx@xx.xx) R:AVP:SMS.0/+44648474 id:24"
data2 = "(AVP:SMTP/<xxx@xx.xx>) R:AVP:FAX.0/<thisword> id:25"

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

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

>>> 
['xx@xx.xx', '+44648474']
['xxx@xx.xx', 'thisword']

这个正则表达式分解:

  • //字符。
  • <?:可选<个字符。
  • (:启动捕获组。
  • [^>\s\)]+:捕获任何非>\s(空白)或)的内容。
  • ):关闭捕获组。

答案 1 :(得分:1)

您可以使用lookaround assertions

排除此类分隔符
k = re.findall(r"(?<=/<)[^>]+(?=>)",data2)

这将确保匹配前的“/<”,然后匹配非“>”的所有内容至少一次,并在匹配后有“>”时成功。