Извлечение кодов с помощью регулярных выражений (неправильные коды) - PullRequest
0 голосов
/ 14 июня 2019

Я извлекаю коды из списка строк, используя текст письма или тему.Выглядит примерно так:

text_list = ['RV: Final model review and algorithm COde 053 and also with CODE52','CODE22/coDe129','CODE178/coDe029']

Пока что я попробовал:

def containsDigit(word):
    if re.search("\d", word):
        return word

regex = re.compile('[CcOoDdEe]{4,}')
codes = []
codes_found = []

for text in text_list:
    codes_found.append(regex.findall(text))
    for code in codes_found:
        codes.append(containsDigit(code))

Моя проблема в том, что я не могу извлечь цифры рядом с кодом или с помощью'' пробел в нем.

Мой желаемый результат будет:

codes = ['COde 053', 'CODE52','CODE22','coDe129','CODE178','coDe029']

1 Ответ

2 голосов
/ 14 июня 2019

Вы можете использовать

import re
text_list = ['RV: Final model review and algorithm COde 053 and also with CODE52','CODE22/coDe129','CODE178/coDe029']
rx = re.compile(r'\bcode\s*\d+', re.I)
res = []
for text in text_list:
    m = rx.findall(text)
    if len(m) > 0:
        res.extend(m)

print(res)
# => ['COde 053', 'CODE52', 'CODE22', 'coDe129', 'CODE178', 'coDe029']

См. Демоверсию Python

Регулярное выражение re.compile(r'\bcode\s*\d+', re.I) соответствует code без учета регистра (из-за re.I) как целое слово (из-за границы слова \b), а затем соответствует 0+ пробелам (\s*), а затем 1+ цифры (\d+).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...