0

たとえば、スラックとブラケットまたは「]」の間にある文字列を見つける方法を知りたいです。

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"

si アイデアは、最初の と だけを取得 することxx@xx.xxです。+44648474dataxx@xx.xxthisworddata2


私はこの正規表現を試しました:


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

しかし、それは戻ってき<xxx@xx.xx>)<thisword>


取得したいのは、 xx @xx.xxとthiswordです

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)

/<これにより、一致の前に" " が保証され、次に " >" 以外のすべてが少なくとも 1 回>一致し、一致の後に " " がある場合に成功します。

于 2013-04-29T13:02:42.117 に答える