基于my previous question,我意识到我的许多字符串实际上是连接的字符串,这使得用C++原始字符串文字分隔符替换引号变得更加困难.
F.I.我想用引号代替本文中的引号:
text = r'''
docstring = "mystr";
docstring = "some \"subs" + some_str + "next";
docstring = (
some_str + "cde" + some_str + "efg" + another_str + "ghi"
);
'''
对此
target_text = r'''
docstring = R""""(mystr)"""";
docstring = R""""(some \"subs)"""" + some_str + R""""(next)"""";
docstring =
some_str + R""""(cde)"""" + some_str + R""""(efg)"""" + another_str + R""""(ghi)"""";
'''
最后一个连接周围的括号被删除,并保留特殊字符,如转义的\"
.
我目前的方法是以下正则表达式
import re
re.sub(
r'(?<=[\s])((?:docstring|some_detailed_notes)\s*=\s*(?://.*\n\s*)*)(("|\(\s*")((?:[^"\\]|\\.)+)("|"\s*\)))([\+_a-z ]*)(\s*;)',
fr'\1{cpp_rawstr_start}\3{cpp_rawstr_end}\5'
text
)
但这当然不会奏效,原因有两个:
- 我的正则表达式与组不匹配,除非只有一个串联
- 组顺序/编号根据要分析的字符串而变化.老实说:完全不知道该如何处理这件事.
我也试过这个regex on regex101,但不能使它工作.