Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中替换字符串中的子字符串的正则表达式_Python_Regex - Fatal编程技术网

在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#[[具体说明]]

详情:

  • re.sub(r'/\*[^*]*\*+(?:[^/*][^*]*\*+)*/',…,行)
    -查找字符串中的所有C样式注释,并
  • 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)