Вот как я решил проблему шаг за шагом. Даже после нескольких лет опыта работы с регулярным выражением, некоторые синтаксисы всегда убегают в моем уме. В такие моменты лучше всего начинать с короткого выражения, которое абсолютно должно соответствовать тому, что вы хотите.
Давайте использовать модуль re
.
>>> import re
Какая ошибка?
>>> refresidue = re.compiler(r'(s/Reference: \ //n)')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'compiler'
А, какие атрибуты имеет модуль re
?
>>> dir(re)
['DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'S',
'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', '_MAXCACHE', '__all__',
'__builtins__', '__doc__', '__file__', '__name__', '__version__', '_alphanum',
'_cache', '_cache_repl', '_compile', '_compile_repl', '_expand', '_pattern_type',
'_pickle', '_subx', 'compile', 'copy_reg', 'error', 'escape', 'findall', 'finditer',
'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'sys',
'template']
Так должно быть re.compile
>>> refresidue = re.compile(r'(s/Reference: \ //n)')(re)
Ok, компиляция завершена. Давайте используем его для соответствия строке.
>>> refresidue.match('Reference: G')
Ничего? Затем разделите выражение.
>>> refresidue = re.compile(r'Reference:')
>>> refresidue.match('Reference: G')
<_sre.SRE_Match object at 0x7fe14701f030>
Конечно, он должен соответствовать. Как насчет добавления G?
>>> refresidue = re.compile(r'Reference: G')
>>> refresidue.match('Reference: G')
<_sre.SRE_Match object at 0x7fe14701f098>
Да. Я хочу весь алфавит, пожалуйста.
>>> refresidue = re.compile(r'Reference: [A-Z]')
>>> refresidue.match('Reference: G')
<_sre.SRE_Match object at 0x7fe14701f030>
Я также хочу выделить письмо.
>>> refresidue = re.compile(r'Reference: ([A-Z])')
>>> refresidue.match('Reference: G')
<_sre.SRE_Match object at 0x7fe1470b9738>
Проблем пока нет. Итак, как мне попасть в круглую скобку?
>>> dir(refresidue.match('Reference: G'))
['__copy__', '__deepcopy__', 'end', 'expand', 'group', 'groupdict', 'groups', 'span', 'start']
group
звучит так.
>>> refresidue.match('Reference: G').group
<built-in method group of _sre.SRE_Match object at 0x7fe1470b9738>
Так что это метод. Давайте попробуем позвонить ему.
>>> refresidue.match('Reference: G').group(0)
'Reference: G'
Как насчет этого?
>>> refresidue.match('Reference: G').group(1)
'G'
Там, Г.
и ошибка? –
Это 're.compile', а не' re.compiler'. – miku
Если 'G' не содержит': ', вы можете разделить и взять вторую часть, используя' mystr.split (':') [1] ' – dheerosaur