我有一个很长且可变的字符串。 像这样:
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]
但这不正确。
答案 0 :(得分:0)
您可以按如下方式修复模式:
tue(?:sday)?\s*\d{1,2}[:.]\d{2}\s*(?:-|to)\s*\d+[:.]\d+
请参阅regex demo
请注意,您不需要使用交替,也不需要捕获组。
tue(?:sday)?
- tue
或tuesday
\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']