【问题标题】:Python RegEx FOR HH:MM [duplicate]Python RegEx FOR HH:MM [重复]
【发布时间】:2021-07-25 07:12:03
【问题描述】:

我正在尝试在字符串(12 小时)中查找时间 (HH:MM) 但代码不起作用。 希望你能帮忙。

python 
import re
pattern = r'^(0?[1-9]|1[0-2]):[0-5][0-9]$'
test_string = 'my activestate platform account is 12:30 now active' 
result = re.findall(pattern, test_string)
print(result)

【问题讨论】:

  • 去掉开头的^和结尾的$
  • ^$ 将匹配限制为整个字符串,将它们取出。
  • 谢谢你们!我将输出作为列表 [('3', '30')] 但我希望它作为字符串 3:30
  • @Ana 我修改了我的答案。

标签: python regex


【解决方案1】:

您的正则表达式锚定在字符串的开头 (^) 和结尾 ($)。只需删除这些,因为时间不一定是您输入的开始和结束!

另外,如果您想捕获整个匹配,您可能需要调整正则表达式,如下所示:

r'((?:0?[1-9]|1[0-2]):[0-5][0-9])'.

(?: )non-capturing group,因此单独的小时数不会转储到 findall 的结果中)

【讨论】:

  • 我不明白(?: 在那个表达式前面做了什么。
  • 这意味着它是一个非捕获组。这是一个组,因为它位于括号 () 内,以便能够使用 | 的“或”语法,但它不是“捕获”,即它本身不在结果中。如果您删除?:,您将获得两个组:['12:30', '12'](外部封闭组,然后是较小的内部组)。另请参阅:stackoverflow.com/questions/18425386/… 了解更多信息。
  • 我想我从未对正则表达式语法进行过如此深入的研究,感谢您的详细解释和链接。
猜你喜欢
  • 2013-12-16
  • 2013-08-03
  • 2014-01-31
  • 1970-01-01
  • 2015-04-20
  • 2018-12-06
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多