J'ai essayé d'utiliser un titre différent pour la question, mais si vous pouvez améliorer la question, veuillez le faire.
Voici mon regexp: f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)
Je devrais l'appliquer sur un fichier, ligne par ligne. La ligne par ligne est OK, la lecture simple à partir d'un fichier et une boucle. Mais comment appliquer l'expression rationnelle aux lignes?
Merci pour toute l'aide, et désolé pour la question noob.
L'expression suivante renvoie une liste. chaque entrée de cette liste contient toutes les correspondances de votre expression rationnelle dans la ligne respective.
>>> import re
>>> [re.findall(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)',line)
for line in open('file.txt')]
Vous pouvez essayer quelque chose comme ça:
import re
regex = re.compile("f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)")
with open("my_file.txt") as f:
for line in f:
result = regex.search(line)
import re
with open('file.txt') as f:
for line in f:
match = re.search('f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)', line)
Notez que Python compile et met automatiquement la regex en mémoire cache. Par conséquent, une étape de compilation distincte n'est pas requise dans ce cas.
Une autre façon de faire
import re
[line for line in open('file.txt') if re.match(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)',line)]
utilisez import re
, puis re.compile()
avec votre modèle comme argument et utilisez l'attribut match
de l'objet résultant sur chaque ligne. quelque chose comme ça..
import re
pat = re.compile(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)')
for line in file:
# use pat.match, pat.search .. etc
J'ai utilisé cette approche:
import re
#Define the search term:
pattern = f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)
#Create an empty list:
data = []
#then
for line in open(r'file.txt'):
if line !='': #<-- To make sure the whole file is read
Word = re.findall(pattFinder1, line)
data.append(str(Word))
for line in file:
line = re
.match("f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)",line)
.group(0)