插入新行字符以格式化Python脚本
所以这有点不同,但请容忍我。我有一些python函数字符串,没有新行字符,但有适当的缩进。例如(完全虚构): 我想在每组4+空格之前插入换行符,这样当我在界面中显示代码时,它会显示为一个python脚本(而不是一个没有任何意义的长行…)。我可以用插入新行字符以格式化Python脚本,python,regex,Python,Regex,所以这有点不同,但请容忍我。我有一些python函数字符串,没有新行字符,但有适当的缩进。例如(完全虚构): 我想在每组4+空格之前插入换行符,这样当我在界面中显示代码时,它会显示为一个python脚本(而不是一个没有任何意义的长行…)。我可以用 str.replace(' ', '\n ') 但这只会替换第一个缩进,如果在字符串上迭代,具有双缩进的案例将被分成两行 是否有人有任何创造性的正则表达式或其他选项来设置此格式?这里有一种方法: In [22]: print(repr(s
str.replace(' ', '\n ')
但这只会替换第一个缩进,如果在字符串上迭代,具有双缩进的案例将被分成两行
是否有人有任何创造性的正则表达式或其他选项来设置此格式?这里有一种方法:
In [22]: print(repr(s))
'def calc_value(a, b, c): if a>b+c: return a else: return b'
In [23]: print(re.sub('( {4,})', r'\n\1', s))
def calc_value(a, b, c):
if a>b+c:
return a
else:
return b
这里有一个方法:
In [22]: print(repr(s))
'def calc_value(a, b, c): if a>b+c: return a else: return b'
In [23]: print(re.sub('( {4,})', r'\n\1', s))
def calc_value(a, b, c):
if a>b+c:
return a
else:
return b
代码
将我的原始评论转换为答案
或者(更快)您可以使用(\t+{4,})
,但在这一点上,它与通过添加制表符提供的几乎相同
替换:\n\1
用法
下面的代码是由上面链接中的regex101自动生成的。直接链接
解释
将以下内容捕获到捕获组1中((?:\t{4})+
匹配以下一次或多次(?:\t |{4})+
匹配制表符\t
将空格字符精确匹配4次{4}
(\t+{4,})
,但在这一点上,它与通过添加制表符提供的几乎相同
替换:\n\1
用法
下面的代码是由上面链接中的regex101自动生成的。直接链接
解释
将以下内容捕获到捕获组1中((?:\t{4})+
匹配以下一次或多次(?:\t |{4})+
匹配制表符\t
将空格字符精确匹配4次{4}
那么...怎么样这还假设可以使用选项卡。这看起来与我要查找的所有内容都匹配。谢谢你的快速回复!那么...怎么样这还假设可以使用选项卡。这看起来与我要查找的所有内容都匹配。谢谢你的快速回复!
((?:\t| {4})+)
# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"((?:\t| {4})+)"
test_str = "def calc_value(a, b, c): if a>b+c: return a else: return b"
subst = "\\n\\1"
# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0)
if result:
print (result)
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
print("def calc_value(a, b, c): if a>b+c: return a else: return b".replace(" "*8,"\n\t\t").replace(" "*4,"\n\t")
def calc_value(a, b, c):
if a>b+c:
return a
else:
return b