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)