【问题标题】:Find string from slash to a space or a character从斜杠到空格或字符查找字符串
【发布时间】:2013-04-29 12:57:21
【问题描述】:

我想知道如何找到一个介于 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"

我的想法是只为第一个 dataxx@xx.xxthisword 获取 xx@xx.xx+44648474 data2


我试过这个正则表达式:


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

但它返回 &lt;xxx@xx.xx&gt;)&lt;thisword&gt;


而我想得到的是xx@xx.xxthisword

【问题讨论】:

  • 如果您输入的子字符串是/&lt;xxx@xx.xx&gt;),并且您想要斜杠和括号之间的所有内容,显然这将包括&lt;&gt;;如果你也想排除这些,你需要在你的正则表达式中这样做。

标签: python regex findall


【解决方案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']

这个正则表达式分解:

  • // 字符。
  • &lt;? :可选&lt; 字符。
  • ( :启动捕获组。
  • [^&gt;\s\)]+ :捕获不是&gt;\s(空白)或) 的任何内容。
  • ):关闭捕获组。

【讨论】:

  • 很好的解释,非常感谢!!
【解决方案2】:

您可以使用lookaround assertions 排除此类分隔符:

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

这将确保在匹配之前“/&lt;”,然后匹配所有不是“&gt;”的东西至少一次,并在匹配之后有一个“&gt;”时成功。

【讨论】:

  • 谢谢,但是当 之间有一个词时,它找不到第二个词.. Inbar Rose 的解决方案仍然有效,感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2013-08-11
  • 2023-03-24
  • 1970-01-01
  • 2013-01-24
  • 2015-03-28
相关资源
最近更新 更多