Привет Я новичок в Python и RegEx. Я экспериментирую с обоими и пытаюсь получить одно регулярное выражение для извлечения данных от пользователя, но я ожидаю разные входы, учитывая опечатки и т. Д. Поэтому в следующем коде я произвольно выбираю какой-то тип строк, который я ожидаю от пользователя дать вам пример того, как они могут вводить данные. Меня интересует только число, которое приходит до или после USD. Например:Эффективное регулярное выражение для нескольких строк с символами и цифрами
ran = random.randint(1, 7)
print str(ran)
if ran == 1:
examplestring = "This item costs 20 USD contact 9999999"
elif ran == 2:
examplestring = "This item costs USD 20"
elif ran == 3:
examplestring = "This item costs 20 U.S.D"
elif ran == 4:
examplestring = "This item costs 20 usd"
elif ran == 5:
examplestring = "This item costs 20 Usd call to buy : 954545577"
elif ran == 6:
examplestring = "This item costs 20USD"
elif ran == 7:
examplestring = "This item costs usd20"
regex = re.compile(r'\busd|\bu.s.d\b|\bu.s.d.\b', re.I)
examplestring = regex.sub("USD", examplestring)
costs = re.findall(r'\d+.\bUSD\b|\bUSD\b.\d+|\d+USD\b|\bUSD\d+', examplestring)
cost = "".join(str(n) for n in costs[0])
cost = ''.join(x for x in cost if x.isdigit())
print cost + " USD"
Используя эти регулярные выражения, я могу получить деталь, которую я хочу, которая составляет «20 долларов США». Мой вопрос в том, правильно ли я делаю это, и если можно сделать код лучше?
Вы можете сделать все это с одним регулярным выражением: '(: (<= USD | USD) \ S * (\ d +)?) | (?: \ d + \ s * (? = USD | usd | Usd | USD)), но иногда это не очень хороший способ сделать это из-за сложности регулярного выражения. См. Объяснение [здесь] (https://regex101.com/r/mH0cC8/1) о том, как это работает. – RedX