2013-06-20 4 views
0

Я пытаюсь сделать регулярное выражение для получения diff для каждого файла из файла diff пути проекта. Вот он:Regex with multiline string

--- Training/main/1/a (revision 18 06 2013 06:48) 
+++ Training/main/1/a (revision 18 06 2013 06:48) 
@@ -1,1 +0,0 @@ 
-isdfsdfsdsadasdasd 
\ No newline at end of file 
--- Training/main/1/abc (revision After) 
+++ Training/main/1/abc (revision After) 
@@ -0,0 +1,1 @@ 
+isdfsdfsdsadasdasd 
\ No newline at end of file 
--- Training/main/1/test.txt (revision 18 06 2013 06:48) 
+++ Training/main/1/test.txt (revision After) 
@@ -1,1 +1,3 @@ 
-sfaa 
\ No newline at end of file 
+sfaaasdasssssdsadasdas 
+ 
+test with moving files on depot 
\ No newline at end of file 

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

Diff 1:

--- Training/main/1/a (revision 18 06 2013 06:48) 
+++ Training/main/1/a (revision 18 06 2013 06:48) 
@@ -1,1 +0,0 @@ 
-isdfsdfsdsadasdasd 
\ No newline at end of file 

Diff 2:

--- Training/main/1/abc (revision After) 
+++ Training/main/1/abc (revision After) 
@@ -0,0 +1,1 @@ 
+isdfsdfsdsadasdasd 
\ No newline at end of file 
+0

Я также попытался это одно: 'х = re.compile ('(^ --- +) ---:.', Re.MULTILINE | re.DOTALL)' Но он также включает в себя новый line в конце строки соответствия. – J33nn

+0

Что касается поиска строки, начинающейся с: '--- file_path revision +++ file_path ревизия @@ some_changes @@' до следующего происшествия этого? – J33nn

ответ

0

Если вообще возможно, вы можете создавать и переформатирование отдельно? Если у вас есть доступ к репозиторию, это должно быть самым простым решением.

В противном случае вы не можете сделать это с помощью регулярных выражений - любая строка может начинаться с --- или +++. Правильное решение для разделения изменений состоит в фактическом анализе формата diff и пропускании указанного количества строк +, - и возможных других индикаторов для каждого фрагмента файла.

+0

Невозможно, я получаю файлы diff из другой системы. Невозможно сделать это иначе. – J33nn

+0

Тогда вам, вероятно, придется это сделать, разобрав содержимое. Если я правильно помню, достаточно хороший путь для фрагмента, отмеченного '@@ -x, y + z, u @@' вам нужно пропустить строки' max (y, u) + abs (yu) ', и вы на следующем фрагменте (обратите внимание на контекстные строки и маркеры '\ ...'). Это приблизительное, а не правильное описание - проверьте формат патча для получения дополнительной информации. – viraptor