Регулярное выражение Python, целое число произвольной длины - PullRequest
3 голосов
/ 29 января 2010

Я пытаюсь сделать простое регулярное выражение в Python. Строка имеет вид FooX, где Foo - некоторая строка, а X - произвольное целое число. У меня такое чувство, что все должно быть очень просто, но я не могу заставить его работать.

На этой ноте кто-нибудь может порекомендовать хорошие материалы для чтения Regex?

Ответы [ 5 ]

5 голосов
/ 29 января 2010

Вы не можете использовать split(), поскольку для этого нужно использовать несколько символов, но вы можете использовать обычное сопоставление, чтобы сделать это.

>>> import re
>>> r = re.compile(r'(\D+)(\d+)')
>>> r.match('abc444').groups()
('abc', '444')
1 голос
/ 29 января 2010

Проще говоря:

>>> import re
>>> a = "Foo1String12345"
>>> re.split(r'(\d+)$', a)[0:2]
['Foo1String', '12345']
1 голос
/ 29 января 2010

Использование групп:

import re

m=re.match('^(?P<first>[A-Za-z]+)(?P<second>[0-9]+)$',"Foo9")
print m.group('first')
print m.group('second')

Используя поиск:

import re

s='Foo9'
m=re.search('(?<=\D)(?=\d)',s)
first=s[:m.start()]
second=s[m.end():]

print first, second
0 голосов
/ 29 января 2010
>>> import re
>>> s="gnibbler1234"
>>> re.findall(r'(\D+)(\d+)',s)[0]
('gnibbler', '1234')

В регулярном выражении \ D означает все, что не является цифрой, поэтому \ D + соответствует одной или нескольким вещам, которые не являются цифрами.

Аналогично \ d означает все, что является цифрой, поэтому \ d + соответствует одной или нескольким цифрам

0 голосов
/ 29 января 2010

Предполагая, что вы хотите разделить "Foo" и число, вам нужно что-то вроде:

r/(?<=\D)(?=\d)/

Который будет совпадать в точке между цифрой и цифрой, без использования каких-либо символов в разбиении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...