我正在编写一个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
############################
我在想,一旦它到达第一个注释块和下一个注释块之间的空白换行符,我就需要正则表达式来停止模式匹配。 任何帮助将不胜感激。
答案 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
##
############################
代替。