2011-02-09 2 views
0

Matching G в «Reference: G.» с использованием регулярных выраженийПроблема в регулярных выражений

Я попытался с помощью этого, но ошибка все еще происходит

refresidue = re.compiler(r'(s/Reference: \ //n)') 

Любые другие предложения, как я совершенно новое в этом. Любая помощь очень ценится.

«Ссылка: G.» ссылка может быть A, C, G или T

Я сожалею о путанице - то, что я хотел бы иметь в том, что выход только печатает символы (A , C, G, T) вместо ссылки:.

Это мой код

refresidue = re.compiler (г '(з/Ссылка: \ // п)')

a_matchref = refresidue.search (строка [2])

если a_matchref не является None:

a_matchref = a_matchref.group(1) 
+3

и ошибка? –

+3

Это 're.compile', а не' re.compiler'. – miku

+0

Если 'G' не содержит': ', вы можете разделить и взять вторую часть, используя' mystr.split (':') [1] ' – dheerosaur

ответ

1

Вы смешивание регулярок синтаксиса из JavaScript (или какого-либо другого регулярного выражение вкуса) и Python; и само регулярное выражение также довольно странно. Кроме того, re.compile() компилирует регулярное выражение, оно не соответствует ни к чему.

Предполагая, что вы хотите, чтобы соответствовать один алфавитно-цифровой символ после текста Reference:, попробуйте следующее:

refresidue = re.search(r"Reference:\s*(\w)", your_text_to_be_matched).group(1) 
+0

'Ссылка: Г.' Извините за путаницу - я бы хотел, чтобы на выходе выводился символ G вместо ссылки – Vincent

+0

Вот что делает этот код. 'print refresidue', чтобы увидеть его. –

+0

Регулярное выражение прекрасно подходит для моего кодирования, извините за мою глупость, я понял, что ошибка вызвана сейчас. – Vincent

0

Я думаю, что это то, что вы после этого, но, может быть, вы можете добавить несколько примеров о том, какие данные вашего являются matching-

import re 
refresidue = re.compile(r'Reference: ([A-Z])')

используется выше, как это:

>>>> refresidue.match("Reference: G").group(1) 
'G' 
1

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

Давайте использовать модуль 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' 

Там, Г.

+0

+1 для показа вашей работы. – DSM

Смежные вопросы