Как поясняется Mozilla здесь , функция Array.from
еще не поддерживается IE
In [32]: import re
In [33]: s='abcd2343 abw34324 abc3243-23A'
In [34]: re.split('(\d+)',s)
Out[34]: ['abcd', '2343', ' abw', '34324', ' abc', '3243', '-', '23', 'A']
Или, если вы хотите разделить по первому вхождению цифры:
In [43]: re.findall('\d*\D+',s)
Out[43]: ['abcd', '2343 abw', '34324 abc', '3243-', '23A']
\d+
совпадает с 1 или более цифрами. \d*\D+
соответствует 0 или более цифр, за которыми следует 1 или более нецифр. \d+|\D+
соответствует 1-или более цифр или 1-или более нецифр. Подробнее о синтаксисе regex в Python читайте в документации.
re.split(pat, s)
разделит строку s
, используя pat
в качестве разделителя. Если pat
начинается и заканчивается круглыми скобками (чтобы быть "группой захвата"), то re.split
вернет подстроки, соответствующие pat
. Например, сравните:
In [113]: re.split('\d+', s)
Out[113]: ['abcd', ' abw', ' abc', '-', 'A'] # <-- just the non-matching parts
In [114]: re.split('(\d+)', s)
Out[114]: ['abcd', '2343', ' abw', '34324', ' abc', '3243', '-', '23', 'A'] # <-- both the non-matching parts and the captured groups
Напротив, re.findall(pat, s)
возвращает только те части s
, которые соответствуют pat
:
In [115]: re.findall('\d+', s)
Out[115]: ['2343', '34324', '3243', '23']
Таким образом, если s
заканчивается цифрой, то можно избежать окончания пустой строкой, используя re. findall('\d+|\D+', s)
вместо re.split('(\d+)', s)
:
In [118]: s='abcd2343 abw34324 abc3243-23A 123'
In [119]: re.split('(\d+)', s)
Out[119]: ['abcd', '2343', ' abw', '34324', ' abc', '3243', '-', '23', 'A ', '123', '']
In [120]: re.findall('\d+|\D+', s)
Out[120]: ['abcd', '2343', ' abw', '34324', ' abc', '3243', '-', '23', 'A ', '123']
Попробуйте этот код, он будет хорошо работать
import re
text = "MARIA APARECIDA 99223-2000 / 98450-8026"
parts = re.split(r' (?=\d)',text, 1)
print(parts)
Вывод:
['MARIA АПАРЕСИДА', '99223-2000 / 98450-8026']
Для разбиения по первой цифре
parts = re.split('(\d.*)','abcd2343') # => ['abcd', '2343', '']
parts = re.split('(\d.*)','abc3243-23A') # => ['abc', '3243-23A', '']
Таким образом, две части всегда будут parts[0] и parts[1].
Конечно, вы можете применить это к нескольким кодам:
>>> s = "abcd2343 abw34324 abc3243-23A"
>>> results = [re.split('(\d.*)', pcode) for pcode in s.split(' ')]
>>> results
[['abcd', '2343', ''], ['abw', '34324', ''], ['abc', '3243-23A', '']]
Если каждый код находится в отдельной строке, то вместо s.split( )
используйте s.splitlines()
.
import re
m = re.match(r"(?P<letters>[a-zA-Z]+)(?P<the_rest>.+)$",input)
m.group('letters')
m.group('the_rest')
Это охватывает ваш угловой регистр abc3243-23A и выводит abc
для группы букв и 3243-23A для the_rest
Поскольку вы сказали, что все они находятся в отдельных строках, вы очевидно, нужно помещать строку за раз во вход input
def firstIntIndex(string):
result = -1
for k in range(0, len(string)):
if (bool(re.match('\d', string[k]))):
result = k
break
return result