Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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,所以这有点不同,但请容忍我。我有一些python函数字符串,没有新行字符,但有适当的缩进。例如(完全虚构): 我想在每组4+空格之前插入换行符,这样当我在界面中显示代码时,它会显示为一个python脚本(而不是一个没有任何意义的长行…)。我可以用 str.replace(' ', '\n ') 但这只会替换第一个缩进,如果在字符串上迭代,具有双缩进的案例将被分成两行 是否有人有任何创造性的正则表达式或其他选项来设置此格式?这里有一种方法: In [22]: print(repr(s

所以这有点不同,但请容忍我。我有一些python函数字符串,没有新行字符,但有适当的缩进。例如(完全虚构):

我想在每组4+空格之前插入换行符,这样当我在界面中显示代码时,它会显示为一个python脚本(而不是一个没有任何意义的长行…)。我可以用

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自动生成的。直接链接


解释
  • ((?:\t{4})+
    将以下内容捕获到捕获组1中
    • (?:\t |{4})+
      匹配以下一次或多次
      • \t
        匹配制表符
      • {4}
        将空格字符精确匹配4次
代码 将我的原始评论转换为答案

或者(更快)您可以使用
(\t+{4,})
,但在这一点上,它与通过添加制表符提供的几乎相同

替换:
\n\1

用法 下面的代码是由上面链接中的regex101自动生成的。直接链接


解释
  • ((?:\t{4})+
    将以下内容捕获到捕获组1中
    • (?:\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