расщепление строки питона - PullRequest
7 голосов
/ 30 января 2011

У меня есть строка ввода, подобная этой: a1b2c30d40, и я хочу токенизировать строку в: a, 1, b, 2, c, 30, d, 40.

Я знаю, что могу читать каждый символ один за другим и отслеживать предыдущий символ, чтобы определить, должен ли я его токенизировать или нет (2 цифры подряд означают, что не токенизируют его), но есть ли более питонический способ делать это?

1 Ответ

13 голосов
/ 30 января 2011
>>> re.split(r'(\d+)', 'a1b2c30d40')
['a', '1', 'b', '2', 'c', '30', 'd', '40', '']

На схеме: как сказано в комментарии, \d означает «соответствовать одной цифре», + - модификатор, который означает «соответствовать одной или нескольким», поэтому \d+ означает «соответствовать как можно большему числу цифр» , Это помещается в группу (), поэтому весь шаблон в контексте re.split означает «разбить эту строку, используя как можно больше цифр, как разделитель, дополнительно захватывая сопоставленные разделители в результате». Если вы пропустите группу, вы получите ['a', 'b', 'c', 'd', ''].

...