Нужна помощь с ре для соответствия и получения значения Python - PullRequest
0 голосов
/ 21 марта 2010

Нужна помощь в отношении ре.

file =  'file No.WR79050107006 from files'

То, что я пытаюсь сделать, это проверить, если строка файла содержит WR + 11 цифр.

result = re.match('^(\S| )*(?P<sr>(\d){11})(\S| )*', file)

Его проверяют только 11 цифр, но не WR перед ним. Как я могу это сделать?

Использование re после сопоставления, как я могу получить значение совпадения (WR79050107006)

Я могу найти строку

index = file.find('file No.')

, а затем получите значение следующих 13 символов.

спасибо

Ответы [ 4 ]

1 голос
/ 21 марта 2010

Если под «проверить, если строка файла содержит WR + 11 цифр», вы имеете в виду «ровно 11, а не 12 +»,

mo = re.search(r'WR(\d{11})(\D|$)', thestring)

должен сделать. Если вы на самом деле имеете в виду «11 или более», вам не нужна деталь (\D|$) (или эквивалентный негативный взгляд и т. Д.).

Редактировать : как ОП говорит в комментарии, что между WR и цифрами может быть пробел, это может измениться на

mo = re.search(r'WR\s*(\d{11})(\D|$)', thestring)

Разница, конечно, заключается в \s*, что означает «0 или более пробельных символов здесь».

mo равно None, если thestring не имеет такого соответствия; в противном случае mo.group(1) дает вам интересующую 11-значную подстроку.

0 голосов
/ 21 марта 2010

Непонятно из вашего комментария к ответу Алекса. Является ли запись действительной, если между WR и 11 цифрами есть пробел?

Надеюсь, один из этих примеров поможет. В противном случае добавьте другие варианты и ожидаемые результаты к своему вопросу, и вы получите ответы, которые прямо к делу.

>>> import re
>>> re.findall(r'(WR\d{11})(?:\D|$)', 'file No.WR79050107006 from files')
['WR79050107006']
>>> re.findall(r'(WR)(\d{11})(?:\D|$)', 'file No.WR79050107006 from files')
[('WR', '79050107006')]

Пробел между WR и 11 цифрами

>>> re.findall(r'(WR)(\d{11})(?:\D|$)', 'file No.WR 79050107006 from files')
[]
>>> re.findall(r'(WR)\s*(\d{11})(?:\D|$)', 'file No.WR 79050107006 from files')
[('WR', '79050107006')]
>>> 

Что-нибудь между WR и 11 цифрами

>>> re.findall(r'(WR).*(\d{11})(?:\D|$)', 'file No.WR!@#$%79050107006 from files')
[('WR', '79050107006')]
0 голосов
/ 21 марта 2010
>>> file =  'file No.WR79050107006 from files'
>>> for item in file.split():
...     if "No.WR" in item:
...         d=item.replace("No.WR","")
...         if d.isdigit() and len(d) == 11:
...            print "ok"
...
ok
0 голосов
/ 21 марта 2010

Попробуйте это:

result = re.search("No.WR\d{11}", file)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...