#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 , но это также сделало бы регулярное выражение еще длиннее и труднее для чтения.