probar - expresiones regulares python
Expresión regular para unir el inicio de la extensión de nombre de archivo y nombre de archivo (8)
¿Cuál es la expresión regular para hacer coincidir cadenas (en este caso, nombres de archivos) que comienzan con ''Ejecutar'' y tienen una extensión de nombre de archivo ''.py''?
La expresión regular debe coincidir con cualquiera de los siguientes:
RunFoo.py
RunBar.py
Run42.py
No debe coincidir:
myRunFoo.py
RunBar.py1
Run42.txt
El equivalente SQL de lo que estoy buscando es ... LIKE ''Run%.py'' ...
Para una expresión regular, usarías:
re.match(r''Run.*/.py$'')
Una explicación rápida:
- . significa coincidir con cualquier personaje.
- * significa coincidir con cualquier repetición del carácter anterior (por lo tanto * significa cualquier secuencia de caracteres)
- / es un escape para escapar del punto explícito
- $ indica "fin de la cadena", por lo que no coincide con "Run_foo.py.txt"
Sin embargo, para esta tarea, probablemente sea mejor usar métodos de cadena simples. es decir.
filename.startswith("Run") and filename.endswith(".py")
Nota: si quiere insensibilidad de mayúsculas y minúsculas (es decir, que coincida con "run.PY" y "Run.py", use la opción re.I para la expresión regular, o conviértala en un caso específico (p. Ej. Filename.lower ()) antes de usar métodos de cadena.
Probablemente esto no cumpla completamente con los estándares de nombres de archivos, pero aquí va:
/^Run[/w]*?/.py$/
Advertencia:
- La respuesta de jobscry ("^ Run.?. py $") es incorrecta (no coincidirá con "Run123.py", por ejemplo).
- La respuesta de orlandu63 ("/^Run[/w]*?.py$/") no coincidirá con "RunFoo.Bar.py".
(No tengo suficiente reputación para comentar, lo siento).
No necesita una expresión regular, puede usar glob, que toma comodines, por ejemplo, Ejecutar * .py
Por ejemplo, para obtener esos archivos en su directorio actual ...
import os, glob
files = glob.glob( "".join([ os.getcwd(), "//Run*.py"]) )
Realmente no entiendo por qué buscas una expresión regular para resolver este ''problema''. Estás buscando una forma de encontrar todos los archivos .py que comienzan con ''Ejecutar''. Así que esta es una solución simple que funcionará, sin recurrir a la compilación de ejecutar una expresión regular:
import os
for filename in os.listdir(dirname):
root, ext = os.path.splitext(filename)
if root.startswith(''Run'') and ext == ''.py'':
print filename
Si escribe una expresión regular un poco más compleja, puede obtener una característica adicional: extraiga el bit entre "Ejecutar" y ".py":
>>> import re
>>> regex = ''^Run(?P<name>.*)/.py$''
>>> m = re.match(regex, ''RunFoo.py'')
>>> m.group(''name'')
''Foo''
(el bit adicional es el paréntesis y todo lo que hay entre ellos, a excepción de ''. *'' que es como en la respuesta de Rob Howard)
mabye:
^Run.*/.py$
solo un intento rápido
/^Run.*/.py$/
O, en Python específicamente:
import re
re.match(r"^Run.*/.py$", stringtocheck)
Esto coincidirá con "Runfoobar.py", pero no con "runfoobar.PY". Para que no distinga entre mayúsculas y minúsculas, utiliza:
re.match(r"^Run.*/.py$", stringtocheck, re.I)