Python - Как использовать регулярное выражение в файле, строка за строкой, в Python

Пытался использовать другой заголовок для вопроса, но если вы можете улучшить вопрос, сделайте это.

Вот мое регулярное выражение: f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)

Мне пришлось бы применять это в файле, строко за строкой. Строка за строкой в ​​порядке, простое чтение из файла и цикл. Но как применить регулярное выражение к строкам?

Спасибо за помощь, и извините за вопрос noob.

Ответ 1

Следующее выражение возвращает список; каждая запись этого списка содержит все совпадения вашего регулярного выражения в соответствующей строке.

>>> import re
>>> [re.findall(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)',line) 
            for line in open('file.txt')]

Ответ 2

Вы можете попробовать что-то вроде этого:

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)

Ответ 3

import re
with open('file.txt') as f:
    for line in f:
        match = re.search('f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)', line)

Обратите внимание, что Python автоматически компилирует и кэширует регулярное выражение, поэтому в этом случае отдельный шаг компиляции не требуется.

Ответ 4

Другой способ сделать

import re
[line for line in open('file.txt') if re.match(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)',line)]

Ответ 5

используйте import re, затем re.compile() с вашим шаблоном в качестве аргумента и используйте результирующий объект match атрибут в каждой строке. что-то вроде этого.

import re 
pat = re.compile(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)')
for line in file:
  # use pat.match, pat.search .. etc

Ответ 6

Я использовал этот aproach:

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))   

Ответ 7

for line in file:
   line = re
           .match("f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)",line)
           .group(0)