Найти - Пользователи
Полная версия: Разобрать RegExp-ами код программы
Начало » Python для новичков » Разобрать RegExp-ами код программы
1
Enigmo
Возникла необходимость заменить в коде программы отдельные участки, которые имеют определенную структуру. Файлов в программе много. Хочу написать программку на Питоне, к-рая Регэкспами разбирает код и вносит определенные изменения. Например:
Код:
  object Label1: TLabel
Left = 50
Top = 44
Width = 25
Height = 13
Caption = 'Enter'
end
object edLine: TEdit
Left = 136
Top = 40
Width = 121
Height = 21
TabOrder = 0
Text = 'Text'
end
object btOK: TButton
Left = 146
Top = 342
Width = 75
Height = 25
Caption = 'OK'
TabOrder = 1
OnClick = btOKClick
end
object Memo: TMemo
Left = 34
Top = 66
Width = 355
Height = 269
Lines.Strings = (
'11'
'12')
TabOrder = 2
end
нужно выделить участок, относящийся к TLabel и изменить его так
  object edLine: TcxTextEdit
Left = 136
Top = 40
Width = 121
Height = 21
TabOrder = 0
Text = 'Text'
Style.LookAndFeel.Kind = lfOffice11
StyleDisabled.LookAndFeel.Kind = lfOffice11
StyleFocused.LookAndFeel.Kind = lfOffice11
StyleHot.LookAndFeel.Kind = lfOffice11
end
Чтобы получить участок, пишу:
def FindDFM_object(otype, text):
w = '\[a-zA-Z0-9_ ]'
obj_re = re.compile("object \w*: "+otype+".*end\s*end", re.DOTALL)
return obj_re.search(text)
но этот Регэксп выводит все от object edLine до конца

как составить правильное регулярное выражение?
Enigmo
Надо было использовать нежадный поиск -
def FindDFM_object(otype, text):
w = '\[a-zA-Z0-9_ ]'
obj_re = re.compile("object \w*: "+otype+".*?end", re.DOTALL)
return obj_re.search(text)
Enigmo
Как загружать регекспы из файла? я хочу сделать скрипты вида что замениь - на что заменить:

TButton
TcxButton\n LookAndFeel.Kind = lfOffice11

но программа загружает TcxButton\n как TcxButton\\n - вместо конца строки ищет \n
pyuser
Enigmo
Возникла необходимость заменить в коде программы отдельные участки, которые имеют определенную структуру. Файлов в программе много. Хочу написать программку на Питоне, к-рая Регэкспами разбирает код и вносит определенные изменения. Например:
Код:
  object Label1: TLabel
Left = 50
Top = 44
Width = 25
Height = 13
Caption = 'Enter'
end
object edLine: TEdit
Left = 136
Top = 40
Width = 121
Height = 21
TabOrder = 0
Text = 'Text'
end
object btOK: TButton
Left = 146
Top = 342
Width = 75
Height = 25
Caption = 'OK'
TabOrder = 1
OnClick = btOKClick
end
object Memo: TMemo
Left = 34
Top = 66
Width = 355
Height = 269
Lines.Strings = (
'11'
'12')
TabOrder = 2
end
нужно выделить участок, относящийся к TLabel и изменить его так
  object edLine: TcxTextEdit
Left = 136
Top = 40
Width = 121
Height = 21
TabOrder = 0
Text = 'Text'
Style.LookAndFeel.Kind = lfOffice11
StyleDisabled.LookAndFeel.Kind = lfOffice11
StyleFocused.LookAndFeel.Kind = lfOffice11
StyleHot.LookAndFeel.Kind = lfOffice11
end
Чтобы получить участок, пишу:
def FindDFM_object(otype, text):
w = '\[a-zA-Z0-9_ ]'
obj_re = re.compile("object \w*: "+otype+".*end\s*end", re.DOTALL)
return obj_re.search(text)
но этот Регэксп выводит все от object edLine до конца

как составить правильное регулярное выражение?
Если я все правильно понимаю, это текстовый вид формы в Delphi или C++ Builder? Рекомендую Вам воспользоваться набором, встаиваемых в IDE утилит http://www.gexperts.org (к Python, это не относится :))
Enigmo
Да Gexpert помогает, но заменяет только похожие компоненты. Гриды ДевЕкспреса сильно отличаются от Борландовских, а менять 100 файлов вручную долго
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