Разделение строки в Python с помощью регулярного выражения

#python #regex #split #whitespace

#python #регулярное выражение #разбиение #пробел

Вопрос:

Мне нужно разбить строку на массив по границам слов (пробел), сохраняя при этом пробелы.

Например:

 'this is  ansentence'
  

Стало бы

 ['this', ' ', 'is', '  ', 'a' 'n', 'sentence']
  

Я знаю о str.partition и re.split, но ни один из них не совсем делает то, что я хочу, и нет re.partition .

Как я должен разбивать строки на пробелы в Python с разумной эффективностью?

Ответ №1:

Попробуйте это:

 s = "this is  ansentence"
re.split(r'(W )', s) # Notice parentheses and a plus sign.
  

Результатом будет:

 ['this', ' ', 'is', '  ', 'a', 'n', 'sentence']
  

Комментарии:

1. Спасибо. Мне следовало более внимательно прочитать re.split документы.

Ответ №2:

Символом пробела в re является ‘s’, а не ‘W’

Сравнить:

 import re


s = "With a sign # written @ the beginning , that's  ansentence,"
    'nno more an instruction!,tyou know ?? "Cases" amp; and surprises:'
    "that will 'lways unknown **before**, in 81% of time$"


a = re.split('(W )', s)
print a
print len(a)
print

b = re.split('(s )', s)
print b
print len(b)
  

производит

 ['With', ' ', 'a', ' ', 'sign', ' # ', 'written', ' @ ', 'the', ' ', 'beginning', ' , ', 'that', "'", 's', '  ', 'a', 'n', 'sentence', ',n', 'no', ' ', 'more', ' ', 'an', ' ', 'instruction', '!,t', 'you', ' ', 'know', ' ?? "', 'Cases', '" amp; ', 'and', ' ', 'surprises', ':', 'that', ' ', 'will', " '", 'lways', ' ', 'unknown', ' **', 'before', '**, ', 'in', ' ', '81', '% ', 'of', ' ', 'time', '$', '']
57

['With', ' ', 'a', ' ', 'sign', ' ', '#', ' ', 'written', ' ', '@', ' ', 'the', ' ', 'beginning', ' ', ',', ' ', "that's", '  ', 'a', 'n', 'sentence,', 'n', 'no', ' ', 'more', ' ', 'an', ' ', 'instruction!,', 't', 'you', ' ', 'know', ' ', '??', ' ', '"Cases"', ' ', 'amp;', ' ', 'and', ' ', 'surprises:that', ' ', 'will', ' ', "'lways", ' ', 'unknown', ' ', '**before**,', ' ', 'in', ' ', '81%', ' ', 'of', ' ', 'time$']
61
  

Ответ №3:

Попробуйте это:

 re.split('(W )','this is  ansentence')