В Python, как я могу удалить символы вокруг определенного символа? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть список, который выглядит следующим образом. Внутри каждого элемента списка отдельные элементы разделяются точкой с запятой, но количество пробелов вокруг каждой точки с запятой кажется случайным:

['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(), но это не опускает символы в середине. Делает ли .replace() каждую возможную комбинацию пробелов и точек с запятой моей единственной надеждой?

Ответы [ 4 ]

0 голосов
/ 07 ноября 2018

Совместное использование re.sub () и replace ():

re.sub(r"\s*([;,])\s*",r"\1",txt).replace(",",", ")
0 голосов
/ 07 ноября 2018

Вот короткий способ сделать это. Этой одной строки должно быть достаточно.

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']
0 голосов
/ 07 ноября 2018
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)
0 голосов
/ 07 ноября 2018

Используйте функцию replace:

>>> new_list = [val.replace(' ', '') for val in old_list]

Редактировать: Как уже указывалось, это удаляет пробелы в словах, как "Нью-Джерси". Вместо этого используйте регулярное выражение для замены:

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