在python

时间:2018-01-29 23:03:58

标签: python

我的数据如下:

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]')

但它并没有发生在我身上。我错过了什么?我只需要改变名称,其中有一个文本字符,一个逗号和一个文本字符紧挨着彼此。列表中的其他名称是正确的,不需要更改。

1 个答案:

答案 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