您的示例中没有标题和参数,因此我不知道它们如何显示。但是您可以使用以下代码来匹配示例字符串:
[EDIT1-根据OP的新示例URI添加了正则表达式以匹配主机名字符串和对user:password的支持]
[EDIT2-添加了参数和标头正则表达式,并在正则表达式的“或”部分添加了更多注释]
import reuriList = [ '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<scheme>w+):' #Scheme +'(?:(?P<user>[w.]+):?(?P<password>[w.]+)?@)?' #User:Password +'[?(?P<host>' #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<port>d{1,6})?' #port +'(?:;(?P<params>[^?]*))?' # parameters +'(?:?(?P<headers>.*))?' # headers )groupNamesList = ['scheme', 'user', 'password', 'host', 'port', 'params', 'headers'] #List of group Namesfor 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=basicScheme: sip, User: support, Password: pass, Host: 212.123.1.213, Port: , Params: urlparams=test, Headers: auth=basic
试试看,看看是否适合您



