Python正则表达式编辑第一条评论

时间:2015-01-09 20:35:48

标签: python regex

我正在编写一个python脚本来编辑我文件中的第一个注释块。 我有一个注释块,如下所示:

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

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

我正在尝试编写一个正则表达式,只找到第一个注释块并替换它,所以它看起来像这样:

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

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

截至目前,我有:

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
############################

我在想,一旦它到达第一个注释块和下一个注释块之间的空白换行符,我就需要正则表达式来停止模式匹配。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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
##
############################

代替。