Уведомления

Группа в Telegram: @pythonsu

#1 Март 20, 2009 16:26:03

Enigmo
От:
Зарегистрирован: 2009-03-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Разобрать RegExp-ами код программы

Возникла необходимость заменить в коде программы отдельные участки, которые имеют определенную структуру. Файлов в программе много. Хочу написать программку на Питоне, к-рая Регэкспами разбирает код и вносит определенные изменения. Например:
Код:

  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 до конца

как составить правильное регулярное выражение?



Офлайн

#2 Март 20, 2009 17:06:32

Enigmo
От:
Зарегистрирован: 2009-03-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Разобрать RegExp-ами код программы

Надо было использовать нежадный поиск -

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)



Офлайн

#3 Март 20, 2009 17:08:42

Enigmo
От:
Зарегистрирован: 2009-03-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Разобрать RegExp-ами код программы

Как загружать регекспы из файла? я хочу сделать скрипты вида что замениь - на что заменить:

TButton
TcxButton\n LookAndFeel.Kind = lfOffice11

но программа загружает TcxButton\n как TcxButton\\n - вместо конца строки ищет \n



Офлайн

#4 Март 20, 2009 17:30:39

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Разобрать RegExp-ами код программы

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, это не относится :))



Офлайн

#5 Март 20, 2009 18:51:07

Enigmo
От:
Зарегистрирован: 2009-03-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Разобрать RegExp-ами код программы

Да Gexpert помогает, но заменяет только похожие компоненты. Гриды ДевЕкспреса сильно отличаются от Борландовских, а менять 100 файлов вручную долго



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version