如何在空格和标记之间搜索字符串? Python

How to search for string between whitespace and marker? Python

我的问题如下: 我有字符串:

datetime = "2021/04/07 08:30:00"

我想保存在变量 hour, 08 and 我想在可变分钟内保存,30

我所做的如下:

import re
 
pat = re.compile(' (.*):')
hour = re.search(pat, datetime)
minutes = re.search(pat, datetime)
print(hour.group(1))
print(minutes.group(1))

我从版画中得到的是 08:3030,所以分钟是正确的,但出于某种我不理解的原因,在几个小时内,第一个 : 被跳过,并从空格到第二个 :.

我做错了什么?谢谢。

通配符 . 匹配任何单个字符,甚至 :。所以 .* 匹配 08:30.

使用:

hour = re.search('\ ([0-9]*):', datetime)

输出:

>>> hour.group(1)
'08'

您可以尝试使用下面的正则表达式使其非贪婪并首先停止 :

hour = re.search(' (.*?):', datetime)

啊,不不,python 有更好的方法 datetime.strptime

https://www.programiz.com/python-programming/datetime/strptime

所以对你来说:

from datetime import datetime

dt_string = "2021/04/07 08:30:00"

# Considering date is in dd/mm/yyyy format
dt_object1 = datetime.strptime(dt_string, "%Y/%m/%d %H:%M:%S")

你想要几个小时?

hours = dt_object1.hour

还是分钟?

mins = dt_object1.minute

现在,如果您提供的只是您需要处理空格的示例,那么您可以拆分字符串。再次使用 dt_string:

dt_string1 = dt_string.split(" ")
dateString = dt_string1.split("/")  # A list in [years, months, days]
timeString = dt_string2.split(":")  # A list in [hours, minutes, seconds]

请使用日期时间模块中的 strptime,这是处理 python 中字符串日期的推荐方法。

strptime returns 来自字符串日期的日期时间对象,这个日期时间对象带有各种好东西,如 datetimehourisoformattimestamp 等,这使得使用日期时间变得轻而易举。

datetime.datetime.strptime("2021/04/07 08:30:00", "%Y/%m/%d %H:%M:%S")
datetime.datetime(2021, 4, 7, 8, 30)
datetime.datetime.strptime("2021/04/07 08:30:00", "%Y/%m/%d %H:%M:%S").hour
8
datetime.datetime.strptime("2021/04/07 08:30:00", "%Y/%m/%d %H:%M:%S").second
0

您正在做的事情的替代方法是将原始日期时间按 space 拆分为日期等变量,这将为您提供 ['2021/04/07', '08:30: 00']。然后,您可以访问列表变量日期的第二个值,并用“:”再次拆分它,以获得单独的时间,并从变量时间访问列表变量时间的部分,包括小时、分钟和秒。

datetime = "2021/04/07 08:30:00"

dates = datetime.split(" ")
print(dates)

time = dates[1].split(":")
print(time)

打印代码会给你

打印(日期)--> ['2021/04/07', '08:30:00']

打印(时间)--> ['08', '30', '00']

您可以使用“08”的时间[0]、“30”的时间[1] 等来访问各个时间部分。

在某些情况下,如果您需要使用字符串,您可以使用 Striptime 来做那件事,您可以使用 +[搜索这些东西,这里有什么东西,您可以在这里制作它,例如 0-7 或 a-z 或 A-Z 或符号]+

import re
datetime = "2021/04/07 08:30:00"
#here you need to make a change
hour = re.search(' (.*):+[0-7]+:', datetime)
minutes = re.search(':(.*):', datetime)
print(hour.group(1))
print(minutes.group(1))

我会将 re.compile 与命名捕获组一起使用并迭代:

inp = "Hello World 2021/04/07 08:30:00 Goodbye"
r = re.compile(r'\b\d{4}/\d{2}/\d{2} (?P<hour>\d{2}):(?P<minute>\d{2}):\d{2}\b')
output = [m.groupdict() for m in r.finditer(inp)]
print(output[0]['hour'])    # 08
print(output[0]['minute'])  # 30

这是一个简单的日期时间问题。 Python 已经能够完全满足您的需求。 3 个步骤:

  • 使用 strptime 从字符串生成日期时间。
  • 您可以获得格式化选项here
  • return 距离日期时间对象的小时或分钟
from datetime import datetime

dt_string = "2021/04/07 08:30:00"
dt_object = datetime.strptime(dt_string, "%Y/%m/%d %H:%M:%S")

print(dt_object)
print(dt_object.hour, dt_object.minute)

# 2021-04-07 08:30:00
# 8 30