【发布时间】:2016-05-27 08:33:44
【问题描述】:
我正在为 SIP(会话启动协议)URI 使用这个正则表达式来提取不同的内部变量。
_syntax = re.compile('^(?P<scheme>[a-zA-Z][a-zA-Z0-9\+\-\.]*):' # scheme
+ '(?:(?:(?P<user>[a-zA-Z0-9\-\_\.\!\~\*\'\(\)&=\+\$,;\?\/\%]+)' # user
+ '(?::(?P<password>[^:@;\?]+))?)@)?' # password
+ '(?:(?:(?P<host>[^;\?:]*)(?::(?P<port>[\d]+))?))' # host, port
+ '(?:;(?P<params>[^\?]*))?' # parameters
+ '(?:\?(?P<headers>.*))?$') # headers
m = URI._syntax.match(value)
if m:
self.scheme, self.user, self.password, self.host, self.port, params, headers = m.groups()
我想通过、分支、联系人、callID 或 Cseq 提取特定的标题,如标题。 sip 消息的一般形式是:
OPTIONS sip:172.16.18.35:5060 SIP/2.0
Content-Length: 0
Via: SIP/2.0/UDP 172.16.18.90:5060
From: "fake" <sip:fake@172.16.18.90>
Supported: replaces, timer
User-Agent: SIPPing
To: <sip:172.16.18.35:5060>
Contact: <sip:fake@172.16.18.90:5060>
CSeq: 1 OPTIONS
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Call-ID: fake-id@172.16.18.90
Date: Thu, 25 Apr 2013 003024 +0000
Max-Forwards: 70
【问题讨论】:
-
“代码格式”,为了以后的注意,完全适用于多行文字内容,例如 SIP 消息(可选带有关闭语法突出显示的注释,形式为
<!-- language: lang-none -->,前面) .如果您以这种方式格式化消息,则不会丢失诸如To和Contact地址(格式类似于 HTML 标记)之类的内容。
标签: python python-2.7 sip