разбить и разделить как разбить список

мой код:

readfile = open("{}".format(file), "r")

lines = readfile.read().lower().split()

elements = """,.:;|!@#$%^&*"\()`_+=[]{}<>?/~"""
for char in elements:
    lines = lines.replace(char, '')

это работает и удаляет специальные символы. но мне нужна помощь с чередованием "-" и "'"

так, например, "сафти-дэнс" подойдет, но не "-привет-", но "я" подойдет, но не "привет"

мне нужно раздеть только начало и конец

это не строка, это список.

Как мне это сделать?


person guide    schedule 28.05.2018    source источник
comment
Возможный дубликат: Удаление пунктуации, кроме тире внутри слова Python   -  person jpp    schedule 29.05.2018
comment
Возможный дубликат Удаление всего, кроме буквенно-цифровых символов, из строки в Питон   -  person Ashlou    schedule 29.05.2018
comment
это не строка, это список.   -  person guide    schedule 29.05.2018


Ответы (2)


Во-первых, использование str.replace в цикле неэффективно. Поскольку строки неизменяемы, вы будете создавать необходимую строку на каждой из ваших итераций. Вы можете использовать str.translate для удаления нежелательных символов за один проход.

Что касается удаления дефиса только в том случае, если он не является граничным символом, то это именно то, что делает str.strip.

Также кажется, что символы, которые вы хотите удалить, соответствуют string.punctuation с особым регистром для '-'.

from string import punctuation

def remove_special_character(s):
    transltation = str.maketrans('', '', punctuation.replace('-', ''))
    return ' '.join([w.strip('-') for w in s.split()]).translate(transltation)

polluted_string = '-This $string contain%s ill-desired characters!'
clean_string = remove_special_character(polluted_string)

print(clean_string)

# prints: 'This string contains ill-desired characters'

Если вы хотите применить это к нескольким строкам, вы можете сделать это с помощью понимания списка.

lines = [remove_special_character(line) for line in lines]

Наконец, чтобы прочитать файл, вы должны использовать оператор with.

with open(file, "r") as f
    lines = [remove_special_character(line) for line in f]
person Olivier Melançon    schedule 28.05.2018
comment
@guide Я также добавил рекомендацию о том, как безопасно открыть файл с помощью инструкции with, я рекомендую вам прочитать ее. - person Olivier Melançon; 29.05.2018

Может быть, вы можете попробовать string.punctuation и strip:

import string

my_string_list = ["-hello-", "safety-dance", "'hi", "I'll", "-hello"]

result = [item.strip(string.punctuation) for item in my_string_list]
print(result)

Результат:

['hello', 'safety-dance', 'hi', "I'll", 'hello']
person student    schedule 28.05.2018