2016-12-27 2 views
0

В процедуре, используемой в качестве встроенного <string>.split(), используется только пробел, чтобы разделить строку.Улучшенный метод разделения строк - разделение на несколько символов

Я хотел бы определить процедуру split_string, которая принимает два входа: строку для разделения и строку, содержащую все символы, рассматриваемые разделителями.

Процедура должна возвращать список строк, которые разбивают строку источника символами в списке.

def split_string(source,list): 
    ... 

>>> print split_string("This is a test-of the,string separation-code!",",!-") 
['This', 'is', 'a', 'test', 'of', 'the', 'string', 'separation', 'code'] 
+3

«Встроенная процедура .split() использует только пробелы для разделения строки». Это на самом деле неправильно. Если вы не укажете аргумент, он будет использовать пробелы. Но если вы это сделаете, он будет использовать этот аргумент как разделитель. – DeepSpace

+0

Также будет вывод 'split_string ('abcd', 'bc')'? – DeepSpace

ответ

1

re.split() работы:

>>> import re 
>>> s = "This is a test-of the,string separation-code!" 
>>> re.split(r'[ \-\,!]+', s) 

['This', 'is', 'a', 'test', 'of', 'the', 'string', 'separation', 'code', ''] 

В вашем случае поиска слов кажется более полезным:

>>> re.findall(r'[\w']+', s) 
['This', 'is', 'a', 'test', 'of', 'the', 'string', 'separation', 'code'] 
1

Вот функция, вы можете использовать - это также экранирует специальные символы:

def escape_char(char): 
    special = ['.', '^', '$', '*', '+', '?', '\\', '[', ']', '|'] 
    return '\\{}'.format(char) if char in special else char 

def split(text, *delimiters): 
    return re.split('|'.join([escape_char(x) for x in delimiters]), text) 

Он не удаляет автоматически пустые записи, например:

>>> split('Python, is awesome!', '!', ',', ' ') 
['Python', '', 'is', 'awesome', ''] 

 Смежные вопросы

  • Нет связанных вопросов^_^