Найти - Пользователи
Полная версия: re.match
Начало » Центр помощи » re.match
1
Bazzilio
Здраствуйте товарищи!

Подскажите пожалуйста есть ли элегантное решение, задача такая:

есть список вида
a = {“aaa”: “a”, “bbb”: “b”, “ccc”: “c”}

и есть срока типа
str = “qqwwweirweru-aaa-qwoeiopqwepw”

можно ли как то сравнить с помощью re.match(<элемент из списка (напр. “aaa”)>, str) сразу весь список? или может есть другой метод? или надо тупо перебирать кадый раз список построчно и сравнивать строку?

в итоге если в str найдено совпадеине с одним из элементов списка например “ааа”, то возвращаем “а”
Vader
А чем перебор не устраивает? Можно вот так извратиться:
a = {"aaa": "a", "bbb": "b", "ccc": "c"}
s = "qqwwweirweru-aaa-qwoeiopqwepw"
matches = map(lambda x: re.match('.*%s.*'%x,s),sorted(a.keys()))
map(lambda x,y: a[y] if x is not None else None, matches, sorted(a.keys()))
agalen
Можно из списка сделать рег. выражение вида “aaa|bbb|ccc”

a = {"aaa": "a", "bbb": "b", "ccc": "c"}
s = "qqwwweirweru-aaa-qwoeiopqwepw"
r = re.search( "|".join( a.keys() ), s )
if r is None:
print "NotFound"
else:
print a[ r.group(0) ]
Bazzilio
Vader
А чем перебор не устраивает? Можно вот так извратиться:
a = {"aaa": "a", "bbb": "b", "ccc": "c"}
s = "qqwwweirweru-aaa-qwoeiopqwepw"
matches = map(lambda x: re.match('.*%s.*'%x,s),sorted(a.keys()))
map(lambda x,y: a[y] if x is not None else None, matches, sorted(a.keys()))
спасибо!

перебор тоже работает, просто мне кажется это наверно самый медленный и неэффективный способ, поэтому подумал может есть какой то еще способ, тем более у питона вроде полно всяких функций для работы со списками.
Vader
Вы бы проверили сначала, что быстрее. У меня, например, на вашем примере перебор работает в 2 раза быстрее, чем тот код, который я написал выше.
Bazzilio
ок, попробую, спс за помощь, ваш вариант для меня еще темный лес, я только учусь.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB