在python中替换字符串中的子字符串的正则表达式
我必须用文件中的另一个字符串替换子字符串 下面是文件中的行 输入:在python中替换字符串中的子字符串的正则表达式,python,regex,Python,Regex,我必须用文件中的另一个字符串替换子字符串 下面是文件中的行 输入:#布拉格语消息“Hello World”0000=1/*澄清0001:[[具体澄清]]*/ 预期输出:#pragma消息“Hello World”0000=1#[[具体说明]] 下面是我的代码: import re line = r'#pragma MESSAGE "Hello World" 0000=1 /* Clarification 0001: [[Specific Clarification]] */'
#布拉格语消息“Hello World”0000=1/*澄清0001:[[具体澄清]]*/
预期输出:#pragma消息“Hello World”0000=1#[[具体说明]]
下面是我的代码:
import re
line = r'#pragma MESSAGE "Hello World" 0000=1 /* Clarification 0001: [[Specific Clarification]] */'
comment = re.search(r'([\/\*]+).*([^\*\/]+)', line)
replace = re.search(r'([\[[]).*([\]]])', comment.group())
replaceWith = replace.group()
content_new = re.sub(r'([\/\*]).*([\*\/])', '# ' + replaceWith, line)
上述代码是否有最佳解决方案?您需要将注释与匹配项匹配,然后替换匹配项中的
[…]]
子字符串。这种方法是最安全的,如果注释中有[[
且没有]
,并且字符串中有多个这样的注释,则不会失败
示例代码片段
输出:#布拉格语消息“Hello World”0000=1#[[具体说明]]
详情:
-查找字符串中的所有C样式注释,并re.sub(r'/\*[^*]*\*+(?:[^/*][^*]*\*+)*/',…,行)
是替换:lambda x:re.sub(r.*(\[\[.]])*,r'.\1',x.group())
是与注释文本匹配的数据对象,它匹配x
之前的任何文本,然后捕获[
以及[
,然后匹配注释的其余部分,并替换为]之前的任何文本
、空格和组1值。请参阅#
内容
?正则表达式有什么问题?如果需要替换,为什么要使用重新搜索
,甚至两次?我用行
编辑了内容
。有没有其他方法用一个正则表达式来解决这个问题?我无法在单个正则表达式中搜索replacetwith声明。content\u new=re.sub(r'/\*(.*?\*/),lambda x:re.sub(r'.*(\[\[.]]).*,r'\\\1',x.group(1)),第行)
,请参阅。还有两种方法:和
import re
line = r'#pragma MESSAGE "Hello World" 0000=1 /* Clarification 0001: [[Specific Clarification]] */'
content_new = re.sub(r'/\*[^*]*\*+(?:[^/*][^*]*\*+)*/', lambda x: re.sub(r'.*(\[\[.*?]]).*', r'# \1', x.group()), line)
print(content_new)