Найти - Пользователи
Полная версия: Загрузить регулярные выражения из файла?
Начало » Python для новичков » Загрузить регулярные выражения из файла?
1
vanvanov
Есть код наподобие этого.
#!/usr/bin/python3
import re
nbspace=' '
debug_mes=''
default_line_break='\n'
regexp=315
line=' on page 13 indicates'
my_expr=' on( page)\s(\d+ indicates)'
match=re.search(my_expr,line)
while match:
	replace_what=match.group(0)
	replace_with=match.group(1)+nbspace+match.group(2)
	line=line.replace(replace_what,replace_with)
	debug_mes=debug_mes+'regexp '+str(regexp)+':'+replace_with+default_line_break
	match=re.search(my_expr,line)
print(debug_mes)
Таких случаев много, и различаются они обычно в replace_with. Мне хочется выгрузить my_expr и replace_with в отдельный файл, чтобы не загромождать скрипт и не обновлять каждый раз скомпилированное из него приложение. Вот только я не могу понять, как правильно в данном случае можно сконвертировать строку в regex.
4kpt_II
Вы хотите иметь возможность редактировать регеспы в текстовом режиме?
vanvanov
4kpt_II
Вы хотите иметь возможность редактировать регеспы в текстовом режиме?
В каком-то смысле, да. У меня одна строка, содержащая регулярные выражения, заменяется другой. Я хочу вынести вне скрипта образец (pattern) контекста для замены и то, чем я хочу заменить этот образец. Ситуация усложняется тем, что замена частично состоит из групп образца. Другими словами, надо правильно сконвертировать строку в регулярное выражение. Есть re.compile, однако ведь replace работает только со строками. Грубо говоря, мне нужно примерно такое:

my_expr=' on( page)\s(\d+ indicates)'
replace_with='re.search(my_expr,line).group(1)+nbspace+re.search(my_expr,line).group(2)'
=>
line=line.replace(my_expr,replace_with)
py.user.next
>>> import re
>>> 
>>> pat = r'(.+)x(.+)'
>>> rep = r'[\2\2][\1\1]'
>>> 
>>> s = 'abcxdef'
>>> 
>>> re.sub(pat, rep, s)
'[defdef][abcabc]'
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB