如何用字符串中的空格替换自定义选项卡,取决于选项卡的大小?

Aus*_*tin 10 python whitespace spaces tabstop

我正在尝试编写一个python函数,不使用任何带有选项卡的字符串的模块,并用适合输入的tabstop大小的空格替换选项卡.它不能只用n个空格替换所有size-n标签,因为标签可以是1到n个空格.我真的很困惑,所以如果有人能指出我正确的方向,我会非常感激.

例如,如果tabstop最初为4:

123\t123 = 123 123 #one space in between
Run Code Online (Sandbox Code Playgroud)

但改为tabstop 5:

123\t123 = 123  123 #two spaces in between
Run Code Online (Sandbox Code Playgroud)

我想我需要用空格填充字符串的结尾,直到字符串%n == 0然后将其打包,但此刻我很丢失..

Joe*_*ett 5

对于制表符长度为5:

>>> s = "123\t123"
>>> print ''.join('%-5s' % item for item in s.split('\t'))
123  123  
>>> 
Run Code Online (Sandbox Code Playgroud)

  • 或者:`(5 *'').join(s.split('\ t'))` (2认同)

Rém*_*émi 4

既然你不想要一个不使用任何外部模块的Python函数,我认为你应该首先设计你的函数的算法......

我建议迭代字符串的每个字符;如果 char i 是制表符,则需要计算要插入多少个空格:下一个“对齐”索引是 ((i / tabstop) + 1) * tabstop。所以你需要插入 ((i / tabstop) + 1) * tabstop - (i % tabstop)。但更简单的方法是插入制表符直到对齐(即 i % tabstop == 0)

def replace_tab(s, tabstop = 4):
  result = str()
  for c in s:
    if c == '\t':
      while (len(result) % tabstop != 0):
        result += ' ';
    else:
      result += c    
  return result
Run Code Online (Sandbox Code Playgroud)

  • 这不应该被投票,因为它是不正确的 - 我怀疑它是否经过过测试。前导选项卡会被简单地丢弃,而不会被任何东西所取代。(尽管记录了该负面功能,但仅替换了第一个选项卡。) (6认同)