Форум сайта python.su
Возникла необходимость заменить в коде программы отдельные участки, которые имеют определенную структуру. Файлов в программе много. Хочу написать программку на Питоне, к-рая Регэкспами разбирает код и вносит определенные изменения. Например:
Код:
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
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)
Офлайн
Надо было использовать нежадный поиск -
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)
Офлайн
Как загружать регекспы из файла? я хочу сделать скрипты вида что замениь - на что заменить:
TButton
TcxButton\n LookAndFeel.Kind = lfOffice11
но программа загружает TcxButton\n как TcxButton\\n - вместо конца строки ищет \n
Офлайн
EnigmoЕсли я все правильно понимаю, это текстовый вид формы в Delphi или C++ Builder? Рекомендую Вам воспользоваться набором, встаиваемых в IDE утилит http://www.gexperts.org (к Python, это не относится :))
Возникла необходимость заменить в коде программы отдельные участки, которые имеют определенную структуру. Файлов в программе много. Хочу написать программку на Питоне, к-рая Регэкспами разбирает код и вносит определенные изменения. Например:
Код:нужно выделить участок, относящийся к TLabel и изменить его так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Чтобы получить участок, пишу: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но этот Регэксп выводит все от object edLine до конца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)
как составить правильное регулярное выражение?
Офлайн
Да Gexpert помогает, но заменяет только похожие компоненты. Гриды ДевЕкспреса сильно отличаются от Борландовских, а менять 100 файлов вручную долго
Офлайн