¿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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta