在 Python 中,如何删除特定字符周围的字符?
In Python, how can I remove characters around a specific character?
我有一个如下所示的列表。在列表的每个项目中,单独的项目由分号分隔,但每个分号周围的 space 数量似乎是随机的:
['New Jersey ; 46.3% ; Republican ; 03/10/2015', 'Pennsylvania ;
39.0%; Democrat ;04/30/2012', 'Virginia . ;54.7% ;Independent
;10/25/10', 'Maryland;44.8% ; Democrat; 01/15/16', 'New York; R50.9%; Republican ; 09/22/15']
我希望最终输出是一个如下所示的列表:
['New Jersey;46.3%;Republican;03/10/2015', 'Pennsylvania;39.0%;Democrat;04/30/2012', 'Virginia;54.7%;Independent;10/25/10' ... ]
我一直在尝试 .split()
,但这并没有删除中间的字符。对 space 和分号的每种可能组合进行 .replace()
是我唯一的希望吗?
使用replace
函数:
>>> new_list = [val.replace(' ', '') for val in old_list]
编辑:如前所述,这会删除 "New Jersey" 等词中的空格。相反,使用正则表达式替换:
>>> import re
>>> new_list = [re.sub(' +\.', '', re.sub(' *; *', ';', val)) for val in old_list]
>>> new_list
['New Jersey;46.3%;Republican;03/10/2015',
'Pennsylvania;39.0%;Democrat;04/30/2012',
'Virginia;54.7%;Independent;10/25/10',
'Maryland;44.8%;Democrat;01/15/16',
'New York;R50.9%;Republican;09/22/15']
这里有一个简短的方法。一行就够了
s = ['New Jersey ; 46.3% ; Republican ; 03/10/2015', 'Pennsylvania ; 39.0%; Democrat ;04/30/2012', 'Virginia . ;54.7% ;Independent ;10/25/10', 'Maryland;44.8% ; Democrat; 01/15/16', 'New York; R50.9%; Republican ; 09/22/15']
new_list = [';'.join([word.strip() for word in item.split(';')]) for item in s]
这是展开的表格。
new_list = []
for item in s:
sub_list = [word.strip() for word in item.split(';')]
new_list.append(';'.join(sub_list))
print(new_list)
输出:
['New Jersey;46.3%;Republican;03/10/2015', 'Pennsylvania;39.0%;Democrat;04/30/2012', 'Virginia .;54.7%;Independent;10/25/10', 'Maryland;44.8%;Democrat;01/15/16', 'New York;R50.9%;Republican;09/22/15']
old_list = ['New Jersey ; 46.3% ; Republican ; 03/10/2015', 'Pennsylvania ;
39.0%; Democrat ;04/30/2012', 'Virginia . ;54.7% ;Independent
;10/25/10', 'Maryland;44.8% ; Democrat; 01/15/16', 'New York; R50.9%; Republican ; 09/22/15']
for row in old_list:
data = [words.strip() for words in row.split(";")]
old_list[old_list.index(row)] = ";".join(data)
联合使用re.sub()和replace():
re.sub(r"\s*([;,])\s*",r"",txt).replace(",",", ")
我有一个如下所示的列表。在列表的每个项目中,单独的项目由分号分隔,但每个分号周围的 space 数量似乎是随机的:
['New Jersey ; 46.3% ; Republican ; 03/10/2015', 'Pennsylvania ;
39.0%; Democrat ;04/30/2012', 'Virginia . ;54.7% ;Independent
;10/25/10', 'Maryland;44.8% ; Democrat; 01/15/16', 'New York; R50.9%; Republican ; 09/22/15']
我希望最终输出是一个如下所示的列表:
['New Jersey;46.3%;Republican;03/10/2015', 'Pennsylvania;39.0%;Democrat;04/30/2012', 'Virginia;54.7%;Independent;10/25/10' ... ]
我一直在尝试 .split()
,但这并没有删除中间的字符。对 space 和分号的每种可能组合进行 .replace()
是我唯一的希望吗?
使用replace
函数:
>>> new_list = [val.replace(' ', '') for val in old_list]
编辑:如前所述,这会删除 "New Jersey" 等词中的空格。相反,使用正则表达式替换:
>>> import re
>>> new_list = [re.sub(' +\.', '', re.sub(' *; *', ';', val)) for val in old_list]
>>> new_list
['New Jersey;46.3%;Republican;03/10/2015',
'Pennsylvania;39.0%;Democrat;04/30/2012',
'Virginia;54.7%;Independent;10/25/10',
'Maryland;44.8%;Democrat;01/15/16',
'New York;R50.9%;Republican;09/22/15']
这里有一个简短的方法。一行就够了
s = ['New Jersey ; 46.3% ; Republican ; 03/10/2015', 'Pennsylvania ; 39.0%; Democrat ;04/30/2012', 'Virginia . ;54.7% ;Independent ;10/25/10', 'Maryland;44.8% ; Democrat; 01/15/16', 'New York; R50.9%; Republican ; 09/22/15']
new_list = [';'.join([word.strip() for word in item.split(';')]) for item in s]
这是展开的表格。
new_list = []
for item in s:
sub_list = [word.strip() for word in item.split(';')]
new_list.append(';'.join(sub_list))
print(new_list)
输出:
['New Jersey;46.3%;Republican;03/10/2015', 'Pennsylvania;39.0%;Democrat;04/30/2012', 'Virginia .;54.7%;Independent;10/25/10', 'Maryland;44.8%;Democrat;01/15/16', 'New York;R50.9%;Republican;09/22/15']
old_list = ['New Jersey ; 46.3% ; Republican ; 03/10/2015', 'Pennsylvania ;
39.0%; Democrat ;04/30/2012', 'Virginia . ;54.7% ;Independent
;10/25/10', 'Maryland;44.8% ; Democrat; 01/15/16', 'New York; R50.9%; Republican ; 09/22/15']
for row in old_list:
data = [words.strip() for words in row.split(";")]
old_list[old_list.index(row)] = ";".join(data)
联合使用re.sub()和replace():
re.sub(r"\s*([;,])\s*",r"",txt).replace(",",", ")