在特定单词后捕获括号中的单词和数字

时间:2018-04-26 06:57:18

标签: python regex keyword matching

我正在使用正则表达式使用关键字' 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 :(得分:1)

  

如何从上面这行获得10号?我想在关键字后面捕获三到四个单词并获取整数值

所以,我知道您希望在关键字(= of ten percent)和整数值(= {{1)之后得到三到四个字}})。我假设"关键字"是10,就像你在模式中使用的那样。

然后,您可以使用

interest at the rate

请参阅Python demo

<强>详情

  • 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')] - 关键字
  • interest at the rate - 第1组:一个或多个单词字符,然后是2个或3个1+空格序列,后跟1个单词字符
  • (\w+(?:\s+\w+){2,3}) - 0+ whitespaces
  • \s* - \(
  • ( - 第2组:一个或多个数字。

如果单词数量可以超过2或3,或者可以是1或0,请将(\d+)替换为{2,3}

如果号码也可以是浮点数,请将*替换为\d+

答案 1 :(得分:-1)

好的,如果我理解了这个问题,你可以使用以下

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']