Python re.findall仅返回部分模式

时间:2018-07-25 19:53:00

标签: python regex

我正在编写一个Python 3程序,该程序跟踪与客户花费的时间。记录小时数的一种方法是使用类似Client 9:35am 1:35pm的字符串,其中第一次是开始,第二次是结束。

要从字符串中提取时间,我使用regex101.com构造了以下模式:

r"[01]?[0-9]:[0-5][0-9]\s*([Aa][Mm]?|[Pp][Mm]?)"

在上面的示例中使用regex101对其进行测试时,它正确地将两次标识为两个单独的匹配项。但是,当尝试在Python中使用该模式时,列表re.findall返回仅包含AM或PM:

re.findall(r"[01]?[0-9]:[0-5][0-9]\s*([Aa][Mm]?|[Pp][Mm]?)", "Client 9:35am 1:35pm")
['am', 'pm']

如何更改此设置,以使匹配包含整个时间?

1 个答案:

答案 0 :(得分:-1)

使用non-capturing group

r"[01]?[0-9]:[0-5][0-9]\s*(?:[Aa][Mm]?|[Pp][Mm]?)"  # not the "?:"

re.findall返回该组的列表,而不是整个匹配项(如果该模式包含捕获组)。