2016-05-23 4 views
3

У меня есть строка, которая следует за рисунком цифр 1+, за которым следует одна буква, 'a', 'b', 'c'. Я хочу разбить строку после каждой буквы.Python Regex - разделительная строка после каждого символа

some_function('12a44b65c') 
>>> ['12a', '44b', '65c'] 

enter image description here

я пытался до сих пор

re.split('([abc]\d+)', '12a44b65c') 
>>> ['12', 'a44', '', 'b65', 'c'] 
+0

Попробуйте поменять шаблоны: 're.findall (r '\ d + [abc]', '12a44b65c')' –

ответ

3

Ваше регулярное выражение в обратном направлении - оно должно быть любое количество цифр, за которыми следует a, b или c. кроме того, я бы не использовать split, который возвращает раздражающих пустые строки, но findall:

>>> re.findall('(\d+[abc])', '12a44b65c') 
['12a', '44b', '65c'] 
+0

\ d * также будет соответствовать без цифр. Вы должны использовать \ d + для удовлетворения требований 1 + цифр. – Squall

+0

@Squall - хорошая точка. Отредактировано и исправлено. – Mureinik

+1

Кроме того, нет необходимости в группе захвата. –

1

Если вы можете использовать newer regex module, вы можете даже разделить на нулевой ширины спичек (с lookarounds, то есть).

import regex as re 

rx = r'(?V1)(?<=[a-z])(?=\d)' 
string = "12a44b65c" 
parts = re.split(rx, string) 
print parts 
# ['12a', '44b', '65c'] 

Этот подход выглядит для одного из a-z позади и цифры (\d) сразу вперед.
Оригинал re.split() не допускает совпадений нулевой ширины, для совместимости вам явно необходимо включить новое поведение с помощью (?V1) в шаблоне.
См. demo on regex101.com.

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