/ / ¿Puede QRegExp coincidir con MULTILINE y DOTALL? - python, regex, pyqt4, qregexp

¿Puede QRegExp coincidir con MULTILINE y DOTALL? - python, regex, pyqt4, qregexp

Recientemente he estado trabajando en un programa PyQt. Al principio usé el módulo re de python para procesar la expresión regular, pero la transformación entre la cadena python y la QString me confunde. Así que intenté cambiar QRegExp.

Sin embargo, quiero usar IGNORECASE, MULTILINE, DOTALL of the python re. He encontrado el QRegExp.setCaseSensitivity () para reemplazar el re.I, pero no puedo encontrar las otras dos características. ¿Alguien puede ayudar?

¿O dime cómo transformar la QString en una cadena de python? Tanto el patrón de regex como los datos son ingresados ​​por el usuario, por lo que sus tipos son QString.

Respuestas

2 para la respuesta № 1

La clase QRegExp de Qt está perfectamente bien, peroEl módulo de re de python es mucho más flexible. Y lo mismo ocurre con el manejo de cadenas en general: si necesita hacer un montón de procesamiento de cadenas en un programa PyQt, a menudo es mejor hacerlo todo en python si puede.

Convertir un QString es bastante fácil. En python2, solo necesitas hacer:

string = unicode(qstring)

Y, por lo general, no hay necesidad de volver a convertirlo: cualquier api Qt que requiera una QString se convertirá automáticamente desde una cadena python de PyQt.

Una solución más general para la conversión QString es hacerlo sobre una base global utilizando el módulo sorbo (que ya debería estar disponible dondequiera que se instale PyQt). Esto debe hacerse al principio de su programa PyQt, antes de que se importe cualquiera de los módulos de PyQt, como esto:

import sip
sip.setapi("QString", 2)

from PyQt4 import QtCore, QtGui

Después de hacer esto, cualquier API Qt que normalmente devuelve una QString devolverá un objeto Python Unicode en su lugar. Para más en esta característica, vea Seleccionando APIs incompatibles en los documentos de PyQt.

Aunque inicialmente puede requerir un poco másTrabajar, tomar esta ruta es probablemente lo mejor a largo plazo. Por un lado, hará que portar a python3 sea más fácil si alguna vez necesitas hacerlo. Para python3, la API de la versión 2 se selecciona de forma predeterminada, por lo que la anterior setapi Paso no sería necesario.


0 para la respuesta № 2

Solo para publicar una respuesta en este lado de las cosas ...

En la mayoría de los casos he jugado con el DOTALL "(.*?)" el enfoque no parece coincidir con nada cuando se trata de QRegExp ().

Sin embargo, aquí hay algo que uso que funciona en casi todos mis casos para hacer coincidir cadenas entre comillas triples:

soltero: "[^#][uUbB]?[rR]?(""")[^"]*(""")"
doble: "[^#][uUbB]?[rR]?(""")[^"]*(""")"

Los únicos casos que no funcionan: """ " """ y """ " """.
Lo mejor que pude encontrar por ahora ...

EDITAR:
Si no los tengo como caracteres de parada, seguirá coincidiendo con el resto del documento.