我的数据如下:
SMITH,JOHN, additional data delimited by commas
JONES,TOMMY, additional data delimited by commas
WILLIAMS, BILLY, additional data delimited by commas
etc.
我需要让它看起来像这样:
SMITH, JOHN, additional data delimited by commas
JONES, TOMMY, additional data delimited by commas
WILLIAMS, BILLY, additional data delimited by commas
etc.
注意前两个名字上逗号后面的额外空格。
我认为我需要使用正则表达式才能实现这一点,但它似乎并不起作用。我试过了:
grantor = grantor.replace(r'[A-Z],[A-Z]', r'[A-Z], [A-Z]')
但它并没有发生在我身上。我错过了什么?我只需要改变名称,其中有一个文本字符,一个逗号和一个文本字符紧挨着彼此。列表中的其他名称是正确的,不需要更改。
答案 0 :(得分:3)
str.replace
不使用正则表达式。您必须使用re
module。
但是因为你只是用逗号和空格替换逗号,所以你实际上并不需要正则表达式:
s = '''SMITH,JOHN
JONES,TOMMY
etc.'''
s = s.replace(',', ', ')
print(s)
# SMITH, JOHN
# JONES, TOMMY
# etc.
我只需要替换紧接在前面并以大写文本字符开头的逗号。
然后你可能想要使用正则表达式。您必须使用re.sub
:
import re
s = 'FOO, SMITH,JOHN'
s = re.sub('([A-Z]),([A-Z])', r'\1, \2', s)
print(s)
# FOO, SMITH, JOHN
这使用引号将这两个字符放在逗号周围。你也可以使用lookbehinds和lookaheads:
s = 'FOO, SMITH,JOHN'
s = re.sub('(?<=[A-Z]),(?=[A-Z])', ', ', s)
print(s)
# FOO, SMITH, JOHN