在连接操作中是否有方法对子字符串进行对齐?
我需要在多行文本中,按照指定的行号和该行中的单词编号,替换一个单词。所有的单词都是对齐在列中的。
我使用了一种算法,通过单词的坐标来找到它。
我会获取指定行号的那一行,把它拆分成单独的子字符串,然后用另一个单词替换指定位置的单词。接着,我会把修改后的行用空格连接起来,然后写回到文件中。
我的问题是,修改后的行中单词的对齐方式都乱了。怎么才能在对齐的同时连接这些单词呢?(不仅仅是被修改的单词,其他的单词也失去了对齐)
我觉得如果我换一种方法,只在要修改的单词位置拆分这一行,可能就能做到,但我没有意识到在单词边界拆分后会失去对齐。
3 个回答
0
str = "this is a sample statement";
print str.rjust(50, ' '); # right justification
这样做会产生以下结果:
这是一个示例语句
50个空格后面跟着你的语句
你可以试试看
print str.rjust(0, ' ')
这样可以让句子靠右对齐。
0
你可以试试用 re.split
来分割字符串。如果你用 /(?<= )\w/
作为正则表达式,它会在每个单词前面分割,同时保留空格。然后你可以在替换完单词后,用 ''.join(...)
把它们连接起来。你可以根据需要在新单词后面加上空格,只要知道旧单词的长度就行。
需要注意的是,如果新单词比列宽还长,就会出问题。
如果我把这个写成代码:
col = 1 # replacing second word
line = "hello there friend " # we've already fetched the line
new_word = "here" # the new word
word_list = re.split('(?<= )\w', line)
length = len(word_list[col])
word_list[col] = col + ((length - len(new_word)) * ' ')
new_line = ''.join(word_list)
8
你可以在列表推导式中使用格式化(通过 format()
或 str.format()
)来处理数据,然后再把它们连接起来:
''.join([format(el, '<10') for el in list_of_strings])
示例:
>>> list_of_strings = ['foo', 'barbaz', 'spam-ham']
>>> ''.join([format(el, '<10') for el in list_of_strings])
'foo barbaz spam-ham '
<
表示左对齐,>
表示右对齐,^
则是把文本居中,宽度是给定的(在上面的例子中是10个字符宽)。想了解更多关于格式化的细节,可以查看 格式规范文档。
右对齐4个空格的示例:
>>> list_of_strings = ['foo', 'ba', 'a']
>>> ''.join([format(el, '>4') for el in list_of_strings])
' foo ba a'