Захват слов и числа в скобках после определенного слова - PullRequest
0 голосов
/ 26 апреля 2018

Я использую регулярное выражение, чтобы найти значение, используя ключевое слово 'interest at the rate' из этого interest at the rate of ten percent (10%)

Я пробовал это

re.compile(r'interest at the rate\s+((?:\w+(?:\s+|$)){3})').findall(r.decode('utf-8'))

и получено ['of ten percent '].

Теперь я попробовал

re.compile(r'interest at the rate of\s+((?:\w+(?:\s+|$)){3})').findall(r.decode('utf-8'))

Однако все, что я получаю, это пустое значение, [].

Как получить число 10 из вышеприведенной строки? Я хочу перехватить от трех до четырех слов после ключевого слова и получить целочисленное значение.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Как получить число 10 из вышеприведенной строки?Я хочу перехватить три-четыре слова после ключевого слова и получить целочисленное значение

Итак, я понимаю, что вы ожидаете получить три-четыре слова после ключевого слова (= of ten percent) и целое число (= 10).Я предполагаю, что «ключевое слово» - это interest at the rate, именно то, что вы использовали в шаблоне.

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

import re
s = "interest at the rate of ten percent (10%)"
r = re.compile(r'interest at the rate (\w+(?:\s+\w+){2,3})\s*\((\d+)')
print(r.findall(s))
# => [('of ten percent', '10')]

См. Python demo .

Подробности

  • interest at the rate - ключевое слово
  • (\w+(?:\s+\w+){2,3}) - Группа 1: один или несколько символов слова, а затем 2 или3 последовательности из 1+ пробелов, за которыми следуют 1+ слов:
  • \s* - 0+ пробелов
  • \( - (
  • (\d+) - группа2: одна или несколько цифр.

Если количество слов может быть больше 2 или 3 или может быть 1 или 0, замените {2,3} на *.

Если число тоже может быть числом с плавающей запятой, замените \d+ на \d[\d.]*.

0 голосов
/ 26 апреля 2018

Хорошо, если я понимаю вопрос, вы можете использовать следующее

import re

value = "interest at the rate of ten percent (10%)"
regexString = r"^interest at the rate of ten percent \(([0-9]{2})%\)$"

result = re.findall(regexString, value, 0) # Zero is the flag for match all, you can omit this. 

print(result)

Это вернет ['10'].

...