Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.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_Sublimetext3 - Fatal编程技术网

Python 获取正则表达式中匹配的字符数

Python 获取正则表达式中匹配的字符数,python,regex,sublimetext3,Python,Regex,Sublimetext3,我有一个用单个空格缩进的文件: Level1 with some text Level2 Level1 Level3 and its text 我想把它缩进4个空格。我考虑使用正则表达式来匹配起始空间^(\s)*。但是,我不知道如何将其替换为“为找到的每个空间应用一个选项卡” 我的预期产出是: Level1 with some text Level2 Level1 Level3 and its text 像\t*len(\1)这样的东西是否存在 编辑:我

我有一个用单个空格缩进的文件:

Level1 with some text
 Level2 
Level1 
  Level3 and its text
我想把它缩进4个空格。我考虑使用正则表达式来匹配起始空间
^(\s)*
。但是,我不知道如何将其替换为“为找到的每个空间应用一个选项卡”

我的预期产出是:

Level1 with some text
    Level2 
Level1 
        Level3 and its text
\t*len(\1)
这样的东西是否存在


编辑:我希望有一个基于正则表达式的解决方案,因为我的目标是在SublimiteText编辑器中使用它,它有一个由正则表达式替换的功能。

我认为正则表达式对于这个问题可能有点过头了。为什么不试试这样的方法(假设您的原始文本文件名为
test.txt


我认为正则表达式对于这个问题来说可能有点过头了。为什么不试试这样的方法(假设您的原始文本文件名为
test.txt


我不认为Python正则表达式引擎支持这一点,但是由于您提到使用升华文本,您可以使用,它在上一次匹配结束后立即匹配位置

Find What:     (^|\G)\s
Replace With:  \t

此模式将匹配紧跟行开头或上一个匹配之后的任何单个空白字符

我认为Python正则表达式引擎不支持这一点,但由于您提到使用升华文本,您可以使用,它在上一次匹配结束后立即匹配位置

Find What:     (^|\G)\s
Replace With:  \t

此模式将匹配紧跟行开头或上一个匹配之后的任何单个空白字符

如果您特别需要空格,请尝试此表达式。
Find What:     (^|\G)\s
Replace With:  \t
s//\t/g; 您可以使用其他一些正则表达式字符替换空格“”,以获得更大的灵活性(“\s”,例如)

在perl中,它可能是

$i=~s/\t/g; 打印“$i\n”


我刚注意到“python”标签。对于perl示例和python中缺少的示例感到抱歉。

如果您特别需要空格,请尝试此表达式。 s//\t/g; 您可以使用其他一些正则表达式字符替换空格“”,以获得更大的灵活性(“\s”,例如)

在perl中,它可能是

$i=~s/\t/g; 打印“$i\n”

我刚注意到“python”标签。对于perl示例和python中缺少的示例,我深表歉意。

您可以这样做:

code = """Level1 with some text
 Level2 
Level1 
  Level3 and its text"""

TAB = "\t" # You could also give TAB="    " ( 4 spaces )

# Spaces at line start are replaced with TAB
code = code.replace('\n ', '\n'+TAB)

while code.find(TAB+" ") is not -1 :
    # For multilevel indentation
    code = code.replace(TAB+' ', TAB*2)

print code
输出:

Level1 with some text
    Level2 
Level1 
        Level3 and its text
您可以这样做:

code = """Level1 with some text
 Level2 
Level1 
  Level3 and its text"""

TAB = "\t" # You could also give TAB="    " ( 4 spaces )

# Spaces at line start are replaced with TAB
code = code.replace('\n ', '\n'+TAB)

while code.find(TAB+" ") is not -1 :
    # For multilevel indentation
    code = code.replace(TAB+' ', TAB*2)

print code
输出:

Level1 with some text
    Level2 
Level1 
        Level3 and its text

您可以使用肯定的查找断言:

text="""Level1 with some text
         Level2 
        Level1 
          Level3 and its text"""


re.sub(r'(?<=\s) ', r'\t', text, flags=re.M)

您可以使用肯定的查找断言:

text="""Level1 with some text
         Level2 
        Level1 
          Level3 and its text"""


re.sub(r'(?<=\s) ', r'\t', text, flags=re.M)

我编辑了我的答案,性能不是我关心的问题。我想从sublime编辑器中修改文件目录。这可能不适用于多个级别。也许你可以把它扩展一点,用适当数量的制表符(或一堆4个空格)替换行开始处的多个空格?@Cqnqrd那么这个问题与Python有什么关系?@Gabriel因为Sublime是用Python编写的,我想一个可行的Python解决方案可以在Sublime中工作?@rvraghav93,谢谢,更新以处理任意数量的白色空格。我编辑了我的答案,这里的性能不是我关心的问题。我想从sublime编辑器中修改文件目录。这可能不适用于多个级别。也许你可以把它扩展一点,用适当数量的制表符(或一堆4个空格)替换行开始处的多个空格?@Cqnqrd那么这个问题与Python有什么关系?@Gabriel因为Sublime是用Python编写的,我想一个可行的Python解决方案可以在Sublime中工作?@rvraghav93,谢谢,更新以处理任意数量的白色空格测试!我不知道
\G
主播。事实上,在我的用例中,它将完美地工作+1但是一个鲜为人知的事实是,
\G
在字符串的开头匹配,因此可以简化正则表达式。事实上相当烦人,例如,请看《崇高》中的相同内容。我经常需要使用诸如
(?:(!^)\G)
交互测试!我不知道
\G
主播。事实上,在我的用例中,它将完美地工作+1但是一个鲜为人知的事实是,
\G
在字符串的开头匹配,因此可以简化正则表达式。事实上相当烦人,例如,请看《崇高》中的相同内容。我经常需要使用像
(?:(!^)\G)