regex - personas - expresiones regulares repeticiones
Regex para cambiar a oraciĆ³n (4)
El que pregunta tenía un caso muy específico en mente. Como un "cambio en el caso de la oración" general en el bloc de notas ++ la primera sugerencia de expresiones regulares no funcionó correctamente para mí. Aunque no es perfecto, aquí hay una versión ajustada que fue una gran mejora en el original para mis propósitos:
find: ([/./r/n][ ]*)([A-Za-z/r])([^/.^/r^/n]+)
replace: /1/U/2/L/3
Todavía tienes un problema con sustantivos en minúsculas, nombres, fechas, países, etc. pero un buen corrector ortográfico puede ayudarte con eso.
Estoy usando Notepad ++ para hacer algo de reemplazo de texto en un archivo de lenguaje de 5453 filas. El formato de las filas del archivo es:
variable.name = Variable Value Over Here, that''''s for sure, Really
El doble apóstrofo es intencional.
Necesito convertir el valor en caso de oraciones, excepto las palabras "Aquí" y "Realmente" que son correctas y deben permanecer en mayúscula. Como puede ver, el caso dentro del valor generalmente se mezcla para comenzar.
He trabajado en esto por un tiempo. Todo lo que tengo hasta ahora es:
(. )([A-Z])(.+)
que parece al menos seleccionar las cadenas adecuadas. La pieza de reemplazo es donde estoy luchando.
El reemplazo de Regex no puede ejecutar la función (como mayúsculas) en las coincidencias. Tendría que crear una secuencia de comandos, por ejemplo, en PHP o JavaScript.
Actualización: vea la respuesta de Jonas .
Me construí una página web llamada Text Utilities para hacer ese tipo de cosas:
- pega tu texto
- entre en "Buscar, regexp y reemplazar" (o presione Ctrl + Shift + F )
- ingrese su expresión regular (la mía sería
^(.*?/=/s*/w)(.*)$
) - verifique la opción "^ $ match line limits"
- elija "Aplicar función JS a los partidos"
- agregar argumentos (primero es la coincidencia, luego sub patrones), aquí
s, start, rest
- cambie la declaración de
return start + rest.toLowerCase();
parareturn start + rest.toLowerCase();
La función final en el área de texto se ve así:
return function (s, start, rest) {
return start + rest.toLowerCase();
};
Tal vez agregue un código para mayúsculas algunas palabras como "Realmente" y "Aquí".
En Notepad ++ puede usar un complemento llamado PythonScript para hacer el trabajo. Si instala el complemento, cree un nuevo script así:
Luego puede usar la siguiente secuencia de comandos, reemplazando las variables regex y de funciones como mejor le parezca:
import re
#change these
regex = r"[a-z]+sym"
function = str.upper
def perLine(line, num, total):
for match in re.finditer(regex, line):
if match:
s, e = match.start(), match.end()
line = line[:s] + function(line[s:e]) + line[e:]
editor.replaceWholeLine(num, line)
editor.forEachLine(perLine)
Este ejemplo particular funciona al encontrar todas las coincidencias en una línea particular, luego aplica la función cada una de las coincidencias. Si necesita soporte multilínea, Python Script "Conext-Help" explica todas las funciones ofrecidas, incluidas las funciones pymlsearch / pymlreplace definidas en el objeto ''editor''.
Cuando esté listo para ejecutar su secuencia de comandos, primero vaya al archivo donde desea que se ejecute, luego vaya a "Scripts>" en el menú Python Script y ejecute el suyo.
Nota: si bien es probable que puedas utilizar la funcionalidad de deshacer de notepad ++ si te equivocas, puede ser una buena idea colocar primero el texto en otro archivo para verificar que funcione.
PS Puedes ''buscar'' y ''marcar'' cada aparición de una expresión regular usando el diálogo de búsqueda integrado de notepad ++, y si pudieras seleccionarlas todas podrías usar la funcionalidad "Caracteres-> MAYÚSCULO" de TextFX para este problema en particular, pero yo No estoy seguro de cómo pasar del texto marcado o encontrado al texto seleccionado. Pero, pensé que publicaría esto en caso de que alguien lo haga ...
Editar: en Notepad ++ 6.0 o superior, puede usar "PCRE (Expresión regular compatible con Perl) Buscar / Reemplazar" (fuente: http://sourceforge.net/apps/mediawiki/notepad-plus/?title=Regular_Expressions ) Así que esto podría se han resuelto usando una expresión regular como (. )([Az])(.+)
con un argumento de reemplazo como /1/U/2/3
.
Find: (. )([A-Z])(.+)
Replace: /1/U/2/L/3
En Notepad ++ 6.0 o superior (que viene con soporte PCRE incorporado).