0

我想知道如何找到一个介于 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和为 +44648474dataxx@xx.xxthisworddata2


我试过这个正则表达式:


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

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


我想得到的是xx@xx.xxthisword

4

2 回答 2

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(空格), 或).
  • ):关闭捕获组。
于 2013-04-29T13:02:23.030 回答
1

您可以使用环视断言排除此类分隔符:

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

这将确保 " /<" 在匹配之前,然后匹配所有不是 " >" 的东西至少一次,并且在>匹配之后有 " " 时成功。

于 2013-04-29T13:02:42.117 回答