我有一个名字和姓氏都用空格隔开的字符串。 例如:
installers = "Joe Bloggs John Murphy Peter Smith"
我现在需要用','(逗号后跟一个空格)替换第二个空格,并将其输出为字符串。
所需的输出是
print installers
Joe Bloggs, John Murphy, Peter Smith
答案 0 :(得分:3)
您应该能够使用查找空格并替换最后一个的正则表达式来做到这一点:
import re
installers = "Joe Bloggs John Murphy Peter Smith"
re.sub(r'(\s\S*?)\s', r'\1, ',installers)
# 'Joe Bloggs, John Murphy, Peter Smith'
这就是说,找到一个空格,然后是一些非空格,然后是一个空格,并用找到的空格,一些非空格和“,”替换它。如果字符串上可能有尾随空格,则可以添加installers.strip()
。
答案 1 :(得分:2)
执行此操作的一种方法是将字符串拆分为以空格分隔的名称列表,获取列表的迭代器,然后在for循环中循环遍历该迭代器,收集名字,然后前进至循环迭代器以也要取第二个名字。
names = installers.split()
it = iter(names)
out = []
for name in it:
next_name = next(it)
full_name = '{} {}'.format(name, next_name)
out.append(full_name)
fixed = ', '.join(out)
print fixed
'Joe Bloggs, John Murphy, Peter Smith'
单行版本为
>>> ', '.join(' '.join(s) for s in zip(*[iter(installers.split())]*2))
'Joe Bloggs, John Murphy, Peter Smith'
这可以通过创建一个包含两次“ 相同迭代器”的列表来实现,因此zip函数返回名称的两个部分。另请参见itertools recipes中的石斑鱼食谱。