正则表达式 sip java_SIP URI变量的Python正则表达式?

你的例子中没有标题和参数,所以我不知道它们是如何出现的.但是您可以使用以下代码来匹配示例字符串:

[EDIT1 – 添加正则表达式以匹配主机名字符串并支持用户:密码,基于OP的新示例URI]

[EDIT2 – 添加了params和header regex并在正则表达式的’OR’部分添加了更多注释]

import re

uriList = [

'sip:192.1.2.3',

'sip:123@192.1.2.3',

'sip:192.1.2.3:5060',

'sip:123@[2620:0:2ef0:7070:250:60ff:fe03:32b7]',

'sip:[2620:0:2ef0:7070:250:60ff:fe03:32b7]',

'sip:[2620:0:2ef0:7070:250:60ff:fe03:32b7]:5060',

'sips:support@voip.example.com',

'sip:22444032@voip.example.com:6000',

'sip:support:pass@212.123.1.213',

'sip:support:pass@212.123.1.213;urlparams=test',

'sip:support:pass@212.123.1.213?auth=basic',

'sip:support:pass@212.123.1.213;urlparams=test?auth=basic',

]

mPattern = re.compile(

'(?P\w+):' #Scheme

+'(?:(?P[\w\.]+):?(?P[\w\.]+)?@)?' #User:Password

+'\[?(?P' #Begin group host

+'(?:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})|' #IPv4 address Host Or

+'(?:(?:[0-9a-fA-F]{1,4}):){7}[0-9a-fA-F]{1,4}|' #IPv6 address Host Or

+'(?:(?:[0-9A-Za-z]+\.)+[0-9A-Za-z]+)'#Hostname string

+')\]?:?' #End group host

+'(?P\d{1,6})?' #port

+'(?:\;(?P[^\?]*))?' # parameters

+'(?:\?(?P.*))?' # headers

)

groupNamesList = ['scheme', 'user', 'password', 'host', 'port', 'params', 'headers'] #List of group Names

for uri in uriList: #iterate through the list of uri

mObject = mPattern.search(uri) #pattern search

if mObject: #if you find a match

groupStrings = [mObject.group(groupName) if mObject.group(groupName) else '' for groupName in groupNamesList] #extract your groupStrings

print('Scheme: {0}, User: {1}, Password: {2}, Host: {3}, Port: {4}, Params: {5}, Headers: {6}'.format(*groupStrings)) #print groupStrings

输出我得到它:

Scheme: sip, User: , Password: , Host: 192.1.2.3, Port: , Params: , Headers:

Scheme: sip, User: 123, Password: , Host: 192.1.2.3, Port: , Params: , Headers:

Scheme: sip, User: , Password: , Host: 192.1.2.3, Port: 5060, Params: , Headers:

Scheme: sip, User: 123, Password: , Host: 2620:0:2ef0:7070:250:60ff:fe03:32b7, Port: , Params: , Headers:

Scheme: sip, User: , Password: , Host: 2620:0:2ef0:7070:250:60ff:fe03:32b7, Port: , Params: , Headers:

Scheme: sip, User: , Password: , Host: 2620:0:2ef0:7070:250:60ff:fe03:32b7, Port: 5060, Params: , Headers:

Scheme: sips, User: support, Password: , Host: voip.example.com, Port: , Params: , Headers:

Scheme: sip, User: 22444032, Password: , Host: voip.example.com, Port: 6000, Params: , Headers:

Scheme: sip, User: support, Password: pass, Host: 212.123.1.213, Port: , Params: , Headers:

Scheme: sip, User: support, Password: pass, Host: 212.123.1.213, Port: , Params: urlparams=test, Headers:

Scheme: sip, User: support, Password: pass, Host: 212.123.1.213, Port: , Params: , Headers: auth=basic

Scheme: sip, User: support, Password: pass, Host: 212.123.1.213, Port: , Params: urlparams=test, Headers: auth=basic

试试看,看看它是否适合你

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值