python:在可变字符串中搜索字符串

时间:2016-03-17 15:33:28

标签: python regex string findall

我有一个很长且可变的字符串。 像这样:

s = "hello today we see there? Otherwise are available tuesday 10:00 to 18:00. OK?"

或者这个:

s = "hello today we see there? Otherwise are available tue 10.00 to 18.00. OK?"

我想要输出:

tuesday 10:00 to 18:00

或者:

tue 10.00 to 18.00

我试过了:

print re.findall("(tuesday|tue \s\d+:|.\d+\s-\s\d+:|.\d+)",s)[0]

但这不正确。

1 个答案:

答案 0 :(得分:0)

您可以按如下方式修复模式:

tue(?:sday)?\s*\d{1,2}[:.]\d{2}\s*(?:-|to)\s*\d+[:.]\d+

请参阅regex demo

请注意,您不需要使用交替,也不需要捕获组。

  • tue(?:sday)? - tuetuesday
  • \s* - 0+空白符号
  • \d{1,2} - 两位或一位数字
  • [:.] - :.
  • \d{2} - 正好是2位数
  • \s* - 0+空白
  • (?:-|to) - :to(请注意(?:...)是非捕获组,因此re.findall无法在结果中返回此内容)
  • \s*\d+[:.]\d+ - 0+空格后跟时间(可以写成前一个,但很可能也会这样做),\d+匹配1位或更多位数。

请参阅Python demo

import re
p = re.compile(r'tue(?:sday)?\s*\d{1,2}[:.]\d{2}\s*(?:-|to)\s*\d+[:.]\d+')
test_str = "hello today we see there? Otherwise are available tuesday 10:00 to 18:00. OK?\nhello today we see there? Otherwise are available tue 10.00 to 18.00. OK?"
print(p.findall(test_str))
# => ['tuesday 10:00 to 18:00', 'tue 10.00 to 18.00']