在连接操作中是否有方法对子字符串进行对齐?

3 投票
3 回答
1190 浏览
提问于 2025-04-17 19:26

我需要在多行文本中,按照指定的行号和该行中的单词编号,替换一个单词。所有的单词都是对齐在列中的。

我使用了一种算法,通过单词的坐标来找到它。

我会获取指定行号的那一行,把它拆分成单独的子字符串,然后用另一个单词替换指定位置的单词。接着,我会把修改后的行用空格连接起来,然后写回到文件中。

我的问题是,修改后的行中单词的对齐方式都乱了。怎么才能在对齐的同时连接这些单词呢?(不仅仅是被修改的单词,其他的单词也失去了对齐)

我觉得如果我换一种方法,只在要修改的单词位置拆分这一行,可能就能做到,但我没有意识到在单词边界拆分后会失去对齐。

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'

撰写回答