¿Cuál es la mejor manera de dividir una cadena como "HELLO there HOW are YOU"
por palabras en mayúsculas?
Entonces terminaría con una matriz como esta: results = ['HELLO there', 'HOW are', 'YOU']
Yo he tratado:
p = re.compile("\b[A-Z]{2,}\b")
print p.split(page_text)
Sin embargo, no parece funcionar.
Ωmega
-
¿Qué pasa cuando no usas compilar?
– Se siente mal hombre
8 de enero de 2019 a las 9:35
-
por el volver a los documentos“la mayoría de las operaciones de expresiones regulares están disponibles como funciones de nivel de módulo y métodos RegexObject. Las funciones son atajos que no requieren que primero compiles un objeto regex, pero pierden algunos parámetros de ajuste.” Puedes usar
re.split(re.split(pattern, string, maxsplit=0, flags=0))
como se menciona en los documentos citados anteriormente.– ZaydH
23 de abril de 2019 a las 8:59
Podrías usar una búsqueda anticipada:
re.split(r'[ ](?=[A-Z]+\b)', input)
Esto se dividirá en cada espacio seguido por una cadena de letras mayúsculas que terminan en un límite de palabra.
Tenga en cuenta que los corchetes son solo para facilitar la lectura y también podrían omitirse.
Si es suficiente que la primera letra de una palabra esté en mayúsculas (por lo tanto, si quisiera dividirla delante de Hello
también) se vuelve aún más fácil:
re.split(r'[ ](?=[A-Z])', input)
Ahora esto se divide en cada espacio seguido de cualquier letra mayúscula.
-
como cambiaria
re.split(r'[ ](?=[A-Z]+\b)', input)
¿entonces no encontró letras mayúsculas? Por ejemplo, ¿no coincidiría con “A”? Lo intentére.split(r'[ ](?=[A-Z]{2,}+\b)', input)
. ¡gracias!– usuario179169
3 de noviembre de 2012 a las 12:51
-
@JamesEggers Quiere decir que desea requerir al menos dos letras mayúsculas, para que no se divida en palabras como
I
?re.split(r'[ ](?=[A-Z]{2,}\b)', input)
Deberías hacerlo.– Martín Ender
3 de noviembre de 2012 a las 12:55
-
Yo sugeriría al menos
[ ]+
o tal vez incluso\W+
para atrapar un poco más de casos. Aún así, una buena respuesta.– jorge
3 de noviembre de 2012 a las 13:03
-
Intenté el mismo enfoque. Sin embargo, tener un
[ ]
no funcionó para mí. En cambio, usé\s
. La expresión regular completa que funcionó para mí fuere.split("\s(?=[A-Z]+\s)", string)
– Jitendra
25 de mayo de 2020 a las 0:55
druida62
Su pregunta contiene el literal de cadena "\b[A-Z]{2,}\b"
pero eso \b
significará retroceso, porque no hay modificador r.
Intentar: r"\b[A-Z]{2,}\b"
.
Cuando dices que algo no funciona, debes explicar por qué. ¿Obtienes una excepción? (Si es así, publique la excepción completa) ¿Obtiene el resultado incorrecto?
– Gareth Latty
3 de noviembre de 2012 a las 12:44