2015-10-04 2 views
0

Это моя строкаматч Regex специального символа + в питоне

relation="da incasso monoporta classe A+ " 

мне нужно извлечь + (класс эффективности) A

Я должен попытаться I списка значений ноу как (A,A+,A++,A+++,B,C...etc)

Итак, я делаю петлю

for token in dictionary: 

Примером токена является A +

Но я не могу поймать токен A + в моей строке (тот, который называется отношением в начале вопроса).

Я использую эту функцию, чтобы поймать что-то в строке

res=cerca_match(token)(relation) 

кон cerca_match определяется следующим образом:

def cerca_match(w): 
    return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).findall 

Что я ловлю является разрешением = «A», но ожидаемый результат является Рез = "A +"

Что случилось?

* UPDATE *

Мне нужны моды этого

def cerca_match(w): 
    return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).findall 

Мне нужно передать маркер, который должен быть согласован ("A +") в этом случае

*** * ОБНОВЛЕНИЕ ****

def cerca_match(w): 
    return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).findall 

Мне нужно передать значение этому fu nction ... Я использую эту функцию, чтобы наловить просто строку

\b(classe)\b 
\b(monoporta)\b 

Но функция также должна работать, если я передать маркер типа «A +»

Так что регулярное выражение будет

\b(A+)\b 

Но это регулярное выражение не может поймать A + внутри строки отношений.

+1

пожалуйста, покажите нам вход и выход ожидать. Это не понятно. –

+0

Вход «da incasso monoporta classe A +» и «A +» Мне нужно проверить, находится ли A + внутри «da incasso monoporta classe A +» с функцией cerca_match (w)! –

+0

нормально, так что всегда будет этот текст в строке, только разные оценки? –

ответ

0

Ваше регулярное выражение не найдет + в его нынешнем виде. Я переписал его с помощью тестовых данных here. Пожалуйста, дайте мне знать, что находится на выходе, которого вы не хотите.

classe ([\w+-]*) 

Это означает, что вы замените это в своей компиляции. поэтому

def cerca_match(w): 
    return re.findall(r'classe ([\w+]*)'.format(w), flags=re.IGNORECASE) 

Это означает, что вы должны вернуть это значение в var, например.

results = circa_match(w) 

где results будет соответствовать вашим совпадениям.

+0

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

+0

Кажется, что ваше регулярное выражение не может поймать + –

+0

Хорошо, но когда-то мой токен " A ++ ", но в другое время это простое слово ... с" classe "метод не является общим –

0
import re 

relation="da incasso monoporta classe A+" 

print(re.findall("[A-Z]\++|[A-Z]",relation)) 

>>> ['A+'] 

Это один будет соответствовать (A,A+,A++,A+++,B,C...etc)

import re 

relation="da incasso monoporta classe A+" 

def cerca_match(w): 
    return re.findall("[A-Z]\++|[A-Z]",w) 
+0

Мне нужно отредактировать функцию def cerca_match (w): , а также поймать + –

+0

Вместо 're.compile' добавить функцию' re.findall' в функцию. Или вы видите, что вы должны использовать 're.compile'? – Leb

+0

В вашей функции я не могу передать токен (A ++ в этом случае, но в другом случае это просто слово), чтобы соответствовать –

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