在我的文本中,我想用两个空格替换所有前导选项卡,但只留下非前导选项卡.
例如:
a
\tb
\t\tc
\td\te
f\t\tg
Run Code Online (Sandbox Code Playgroud)
("a\n\tb\n\t\tc\n\td\te\nf\t\tg")
应该变成:
a
b
c
d\te
f\t\tg
Run Code Online (Sandbox Code Playgroud)
("a\n b\n c\n d\te\nf\t\tg")
对于我的情况,我可以通过多次替换操作来执行此操作,重复与许多最大嵌套级别一样多次,或者直到没有任何更改.
但是,一次运行也不可能吗?
我尝试了但是没有设法提出一些东西,我提出的最好的东西是外观:
re.sub(r'(^|(?<=\t))\t', ' ', a, flags=re.MULTILINE)
Run Code Online (Sandbox Code Playgroud)
哪个"仅"使一个错误的替换(第二个选项卡在f和之间g).
现在可能是因为已经更换的部件无法再次匹配(或者更换不会立即发生),因此在单次运行中完全无法进行正则表达式,并且您无法对"计数"进行排序正则表达式,在这种情况下,我希望看到一些更详细的解释原因(只要这不会过多地转移到[cs.se]领域).
我目前正在使用Python,但这可以应用于几乎任何类似的正则表达式实现.
您可以匹配行开头的选项卡,并使用lambda里面re.sub替换为double空格乘以匹配的长度:
import re
s = "a\n\tb\n\t\tc\n\td\te\nf\t\tg";
print(re.sub(r"^\t+", lambda m: " "*len(m.group()), s, flags=re.M))
Run Code Online (Sandbox Code Playgroud)
请参阅Python演示
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |