2015-01-09 3 views
3

Я пишу скрипт python для редактирования только первого блока комментариев в моих файлах. У меня есть блок комментария, который выглядит следующим образом:Python Регулярное выражение для редактирования первого комментария

############################ 
## 
## Comment to 
## be changed 
## 
############################ 

############################ 
## Don't want to change 
############################ 

Я пытаюсь написать регулярное выражение только найти первый блок комментария и заменить его, так это выглядит следующим образом:

############################ 
## 
## Comment has 
## been changed 
## 
############################ 

############################ 
## Don't want to change 
############################ 

As прямо сейчас у меня есть:

editedCommentFile = re.sub(r'\#{2,150}.*?\#{2,150}.*?\s*', replString, searchedString, 1, re.DOTALL) 

к сожалению, это соответствует только первой строке «#» и 3-х символов следующей строки «##». Это выглядит следующим образом:

############################ 
## 
## Comment has 
## been changed 
## 
############################ Comment to 
## be changed 
## 
############################ 

############################ 
## Don't want to change 
############################ 

Я имею в виду, что-то мне нужно регулярное выражение, чтобы остановить шаблон согласования, когда он достигает пустой символ новой строки между первым комментарием блока и следующий. Любая помощь будет оценена по достоинству.

+0

Если ваш вопрос правильно ответил/решен, пожалуйста, примите ответ, поэтому другие пользователи SO с такой же/подобной проблемой (например, я) знают, что предоставленный ответ/решение сработало для вас. Благодаря! –

ответ

3

Использование \#{3,150} требовать 3-или-больше # символов:

import re 

searchedString = '''\ 
############################ 
## 
## Comment to 
## be changed 
## 
############################ 

############################ 
## Don't want to change 
############################''' 


replString = '''\ 
############################ 
## 
## Comment has 
## been changed 
## 
############################''' 

editedCommentFile = re.sub(r'\#{2,150}.*?\#{3,150}', replString, 
          searchedString, 1, re.DOTALL) 

print(editedCommentFile) 

Урожайность

############################ 
## 
## Comment has 
## been changed 
## 
############################ 

############################ 
## Don't want to change 
############################ 

При использовании \#{2,150} затем r'\#{2,150}.*?\#{2,150}' преждевременно соответствует

############################ 
## 

поэтому вы получите

############################ 
## 
## Comment has 
## been changed 
## 
############################ 
## Comment to 
## be changed 
## 
############################ 

вместо этого.

+0

Это сработало отлично! Спасибо, что помогли мне. – yoloswaggins

Смежные вопросы