Ответ 1
Используйте re.finditer()
:
>>> s='111234'
>>> [m.group(0) for m in re.finditer(r"(\d)\1*", s)]
['111', '2', '3', '4']
Я не очень хорошо знаком с Regex, но я много читал об этом. Предположим там строку s = '111234'
Мне нужен список со строкой, разделенной на L = ['111', '2', '3', '4']
. Мой подход состоял в том, чтобы сделать группу, проверяя, является ли она цифрой или нет, а затем проверяет повторение группы. Что-то вроде этого
L = re.findall('\d[\1+]', s)
Я думаю, что \d[\1+]
будет в основном проверять либо "цифру", либо "цифру +" на одни и те же повторы. Я думаю, что это может сделать то, что я хочу. Может ли кто-нибудь помочь?
Используйте re.finditer()
:
>>> s='111234'
>>> [m.group(0) for m in re.finditer(r"(\d)\1*", s)]
['111', '2', '3', '4']
Если вы хотите сгруппировать все повторяющиеся символы, вы также можете использовать itertools.groupby
, например
from itertools import groupby
print ["".join(grp) for num, grp in groupby('111234')]
# ['111', '2', '3', '4']
Если вы хотите убедиться, что хотите только цифры, то
print ["".join(grp) for num, grp in groupby('111aaa234') if num.isdigit()]
# ['111', '2', '3', '4']
Попробуйте следующее:
s = '111234'
l = re.findall(r'((.)\2*)', s)
## it this stage i have [('111', '1'), ('2', '2'), ('3', '3'), ('4', '4')] in l
## now I am keeping only the first value from the tuple of each list
lst = [x[0] for x in l]
print lst
выход:
['111', '2', '3', '4']