正则表达式找到多个匹配

时间:2015-01-05 16:16:11

标签: python regex

我已经尝试了一些前瞻性的可能性来找到字符串中的模式,但我被困在这里,因为我必须检查多个条件。

我有一个像

这样的字符串
string = ''' i was behind the bars for (5.75) years '''
string2 = ''' I travelled for 6 months in Switzerland and some years say 5.2 in England '''
re.search(r'(?=\byears\b)([/d]+\S+)',str,re.I)

这是我多年后尝试获取日期; /S+用于获取5.335.44等,因为数字组合后会有一个空格。

我希望正则表达式匹配任何数字组合,例如5.7510.25等,即使它用括号或引号括起来。但我只需要数字。它可以在“年”之前或之后。在Python中使用正则表达式检查多种可能性的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

这可能有用。

更新

您收到“无效表达”错误 除非python不支持群集组中的修饰符,否则我看不到任何无效 您可以尝试取出case修饰符并将其添加到regex函数中的options部分。

然后试试这个:

(?:\b(\d+(?:\.\d*)?|\.\d+)\b.*?(?:(?:\r?\n).*?){0,2}\byears?\b|\byears?\b.*?(?:(?:\r?\n).*?){0,2}\b(\d+(?:\.\d*)?|\.\d+)\b)  

原文:

 #  (?i:\b(\d+(?:\.\d*)?|\.\d+)\b.*?(?:(?:\r?\n).*?){0,2}\byears?\b|\byears?\b.*?(?:(?:\r?\n).*?){0,2}\b(\d+(?:\.\d*)?|\.\d+)\b)

 (?i:
      \b 
      (                             # (1 start), Digits
           \d+ 
           (?: \. \d* )?
        |  \. \d+ 
      )                             # (1 end)
      \b 
      .*? 
      (?:                           # 0, 1 or 2 lines
           (?: \r? \n )
           .*? 
      ){0,2}
      \b years? \b                  # Followed by "year(s)"

   |                              # or --

      \b years? \b                  # "year(s)"
      .*?   
      (?:                           # 0, 1 or 2 lines
           (?: \r? \n )
           .*? 
      ){0,2}
      \b 
      (                             # (2 start), Followed by Digits
           \d+ 
           (?: \. \d* )?
        |  \. \d+ 
      )                             # (2 end)
      \b 
 )