¿Expresión regular de Python para variables SIP URI?
Estoy usando esta expresión regular para los URI SIP (Protocolo de inicio de sesión) para extraer las diferentes variables internas.
_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>.*))?Necesito modificar esta expresión para admitir IPv6 y hacer coincidir todos los diferentes tipos de URI de SIP. La idea básica es que IPv4 muestra el formulario 192.168.0.1 e IPv6 2620: 0: 2ef0: 7070: 250: 60ff: fe03: 32b7. Debido a que el número de puerto es posterior:, el IPv6 está entre paréntesis en el SIP URI.
Su forma general es:
sorbo: usuario: contraseña @ host: puerto; parámetros de uri? encabezados
Estos son algunos ejemplos:
uriList = [
'sip:192.1.2.3',
'sip:[email protected]',
'sip:192.1.2.3:5060',
'sips: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:[email protected]',
'sip:[email protected]:6000',
'sip:thks.ashwin:[email protected]',
]
Salida
Scheme: sip, User: , Host: 192.1.2.3, Port:
Scheme: sip, User: 123, Host: 192.1.2.3, Port:
Scheme: sip, User: , Host: 192.1.2.3, Port: 5060
Scheme: sips, User: 123, Host: 2620:0:2ef0:7070:250:60ff:fe03:32b7, Port:
Scheme: sip, User: , Host: 2620:0:2ef0:7070:250:60ff:fe03:32b7, Port:
Scheme: sip, User: , Host: 2620:0:2ef0:7070:250:60ff:fe03:32b7, Port: 5060
Scheme: sips, User:support , Host: voip.example.com
Scheme: sip, User:22444032 , Host: voip.example.com, Port: 6000
Scheme: sip, User:thks.ashwin, Password:pass ,Host: 212.123.1.213
Traté de modificar la expresión del host para que coincida con la expresión [IPv6] e IPv4 pero sin suerte = ´ (
He estado usandohttps://pythex.org/ para probar los resultados.
) # headers
m = URI._syntax.match(value)
if m:
self.scheme, self.user, self.password, self.host, self.port, params, headers = m.groups()
Necesito modificar esta expresión para admitir IPv6 y hacer coincidir todos los diferentes tipos de URI de SIP. La idea básica es que IPv4 muestra el formulario 192.168.0.1 e IPv6 2620: 0: 2ef0: 7070: 250: 60ff: fe03: 32b7. Debido a que el número de puerto es posterior:, el IPv6 está entre paréntesis en el SIP URI.
Su forma general es:
sorbo: usuario: contraseña @ host: puerto; parámetros de uri? encabezados
Estos son algunos ejemplos:
uriList = [
'sip:192.1.2.3',
'sip:[email protected]',
'sip:192.1.2.3:5060',
'sips: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:[email protected]',
'sip:[email protected]:6000',
'sip:thks.ashwin:[email protected]',
]
Salida
Scheme: sip, User: , Host: 192.1.2.3, Port:
Scheme: sip, User: 123, Host: 192.1.2.3, Port:
Scheme: sip, User: , Host: 192.1.2.3, Port: 5060
Scheme: sips, User: 123, Host: 2620:0:2ef0:7070:250:60ff:fe03:32b7, Port:
Scheme: sip, User: , Host: 2620:0:2ef0:7070:250:60ff:fe03:32b7, Port:
Scheme: sip, User: , Host: 2620:0:2ef0:7070:250:60ff:fe03:32b7, Port: 5060
Scheme: sips, User:support , Host: voip.example.com
Scheme: sip, User:22444032 , Host: voip.example.com, Port: 6000
Scheme: sip, User:thks.ashwin, Password:pass ,Host: 212.123.1.213
Traté de modificar la expresión del host para que coincida con la expresión [IPv6] e IPv4 pero sin suerte = ´ (
He estado usandohttps://pythex.org/ para probar los resultados.