Как вложить регулярное выражение в условие if-else? [Пожалуйста, прочитайте описание]

#python #regex #regex-group

#python #регулярное выражение #regex-group

Вопрос:

Я извлекаю доступный баланс (в индийских рупиях) из текстовых сообщений, используя это регулярное выражение

 (?s)(?i).*(?:avbl|a/c|available|avl|acct|account|)\s (?:balance|bal)\s*(?::|\-|\=|is|\-|)\s*(?:Rs?|INR|)(?:[\s.]*)(?P<balance>[0-9,] (?:.[0-9] )?|.[0-9] )
  

Но есть некоторые сообщения без баланса, и в этих случаях это приводит к ошибке. Есть ли способ поместить вышеупомянутое регулярное выражение в условие if else? Например, если этот шаблон найден, получите группу ‘balance’ = <balance_amount> иначе ‘balance’ = Нет?

Я попытался вложить вышеупомянутое регулярное выражение в условие if-else, но баланс просто отсутствует

 (?s)(?i).((?:avbl|a/c|available|avl|acct|account|)\s (?:balance|bal)\s*(?::|\-|\=|is|\-|)\s*(?:Rs?|INR|)(?:[\s.]*)(?P<balance>[0-9,] (?:.[0-9] )?|.[0-9] )|)
  

Пожалуйста, помогите

Комментарии:

1. Какой метод python вы используете для сопоставления регулярного выражения с текстовым сообщением? Большинство re.find , re.match и т. Д. возвращают None, если совпадение не найдено. Можете ли вы просто проверить это None и обработать его соответствующим образом?

2. Я не понимаю, что вы пытаетесь спросить? Вы сказали, что хотите, чтобы регулярное выражение совпадало None , но после этого вы сказали, что попробовали, и оно совпало None . пожалуйста, уточните свой вопрос. в общем, если вы хотите, чтобы что-то было сопоставлено, но может быть найдено или не использовано ? . например: регулярное che?at выражение будет совпадать cheat до тех пор, пока chat

Ответ №1:

 import re

words = 'xblue'
words2 = 'green'
def foo(text):
    test = re.compile('blue')
    match = test.search(text)
    if match == None:
        return ''
    else:
        return match.group()
print(foo(words2))
print(foo(words))
  

будет напечатано
«

синий «

Как сказал Фрэнк в комментариях, вы могли бы просто записать его в функцию if, чтобы вернуть то, что вы хотите. Вероятно, есть способ сопоставить строку без длины один раз, используя встроенные операторы регулярных выражений if и / или lookahead , но это также сделало бы регулярное выражение еще длиннее и труднее для чтения.