Я новичок в Python и Regex. Я пытаюсь сопоставить некоторые шаблоны из текста, а затем вернуть подстроку из сопоставленного шаблона. Шаги следующие:
- определяет, соответствует ли текст обновлению состояния запроса на обслуживание, который представляет собой строку, начинающуюся с SRT, за которой следуют 4 цифры, такие как SRT0001, SRT0002 и т. Д.
- если вышеуказанное условие удовлетворяет, вернуть номер запроса (SRT0001 и т. Д.), Указанный в сопоставленном тексте. Пример: если текст «Надеюсь, у вас отличный день. Мне нужно обновление SRT0001»
В этом случае мой код должен соответствовать шаблону и возвращать SRT0001. Я уже написал код, который возвращает номер SRT, но мне интересно, есть ли лучший способ сделать это? Мой код такой, как показано ниже.
regex_1 = re.compile('(looking|want|need|seek|seeking|request|requesting|get|please)'
'\s([^.?]{0,6})(\s{0,1})'
'(status|update)\s([^.?]{0,6})(\s{0,1})'
'(srt[0-9]{4})')
'(srt[0-9]{4})\?')
regex_2 = re.compile('(can|would|could)?\s?'
'(you|your|anyone|someone)+\s?'
'(guys|people|fellows|team)?\s?(please)?\s?'
'(let|tell)?\s?'
'(us|me|my team|our people)?\s?'
'(know|update)\s?'
'(of|on|about|regarding)\s?'
'(status|the status)\s'
'(of|of this|of the|of the below)?\s?'
'(sr|request|service request|srt)?\s?'
'([:-;])?\s?'
'(srt[0-9]{4})\?')
def status_update_regex(email):
email = email.lower()
if regex_1.search(email) != None:
return re.search('srt[0-9]{4}',str(regex_1.search(email))).group(0)
elif regex_2.search(email) !=None:
return re.search('srt[0-9]{4}',str(regex_2.search(email))).group(0)
else:
return 0
regex_1 и regex_2 пытаются проверить, является ли данный текст запросом пользователя относительно запросов на обслуживание. Кажется, у меня нет проблем с сопоставлением некоторых простых шаблонов, но возвращаемое значение (которое должно быть SRTnumber) в status_update_regex () выглядит очень сложным и избыточным. Есть ли в любом случае, я могу сделать это лучше?