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

Python Regular Expression to Edit First Comment

我正在编写一个 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
############################

我在想,不知何故我需要正则表达式在到达第一个评论块和下一个评论块之间的空白换行符时停止模式匹配。 任何帮助将不胜感激。

使用 \#{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
##
############################

相反。