Уведомления

Группа в Telegram: @pythonsu

#1 Март 30, 2018 23:42:34

lupanton
Зарегистрирован: 2018-03-25
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование regex совместно с for...

Добра всем!
Возникла идея использовать элементы списка words в качестве исходной информации для анализа многострочного текста text. Вот так:

 import re
words = ['i', 'one', 'kan']
text = ''' Walmart’s revenue eclipsed $500 billion in its latest fiscal year—more than Apple i Inc.
and Exxon Mobil Corp. combined i. But Walmart’s profits one boy have declined 30% over three years
to $10.5 billion, Boy squeezed by competition and kan e-commerce One investments to fend Kan off AmazonInc.
'''
for word in words:
    pattern = 'r' + '\"' + '\\b' + '\\' + word + '\"'
    print(pattern)
    count = re.findall(pattern, text, re.IGNORECASE | re.VERBOSE)

Но…
1. pattern выдает в print обнадеживающий результат r“\b\i” на первой итерации
2. Но count не воспринимает это выражение и выдает ошибку error: bad escape \i at position 4
Вопрос: это вообще светлая тема? Как имплантировать нужное мне слово в regex? Как еще можно сделать?


Отредактировано lupanton (Март 30, 2018 23:43:47)

Офлайн

#2 Март 31, 2018 02:40:08

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Использование regex совместно с for...

pattern = ‘r’ + ‘\“’ + ‘\\b’ + ‘\\’ + word + ‘\”’
обьясните что вы хотите найти таким макаром? Зачем столько кавычек и слешей? ИМХО у вас в тексте нету строки соответвующей ни одному из шблонов поиска: r“\b\i”, r“\b\one”, r“\b\kan”

 for word in words:
    pattern = r'\b' + word     # Так
    #pattern = '\\b' + word  # Или так, в принципе один хрен https://docs.python.org/3/library/re.html
    print(pattern)
    count = re.findall(pattern, text, re.IGNORECASE | re.VERBOSE)
    print(count)
>>> 
\bi
['i', 'i', 'i', 'I', 'i', 'i']
\bone
['one', 'One']
\bkan
['kan', 'Kan']
>>> 





==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Март 31, 2018 02:41:07)

Офлайн

#3 Март 31, 2018 13:33:56

lupanton
Зарегистрирован: 2018-03-25
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование regex совместно с for...

Разобрался уже сам. Просто измени слегка регулярку. Проблема была в том, что символ ‘i’ не воспринимался в count.

 pattern = r"\b(" + word + ")" + "\\b"
    count = len(re.findall(pattern, text, re.IGNORECASE | re.VERBOSE))
Хотя, наверное, можно было и проще.
Спасибо.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version