我目前有一个文本字段,其中包含有关用于计划目的的时间的信息。因为它是一个文本字段,所以数据是非结构化的,并且有许多不同的格式。数据示例包括:
因此,我试图编写一个解析器,将这些转换成可用的数据点。我现在正在处理时间组件。为了构造数据并能够将其传递到dateutil
解析器中,我想一直“填充”。6将变成6:00,7将变成7:00等等。为此,我尝试使用正则表达式:
reg = re.compile('[\d]([^:]|$)')
这样做的目的是得到任何一个数字,要么后面没有a:,要么在行尾。但是,我意识到这会得到太多的数据点,因为在第一个示例中,它会得到7:30的“3”和7:30的0。你知道吗
将这些数据转换成可用格式的更好方法是什么?你知道吗
我想用占位符代替正确的时间后,找到错误的时间会容易得多。然后我们可以更正错误的时间格式,然后再次用实际时间替换占位符
这是一个简单的实现,你可以调整它来满足你的需要
我将采用两阶段的方式,利用
re.split
的一个有趣特性,示例数据:功能:
用法:
说明:
我给
re.sub
组中的第一个参数。re.split
给出了一个list
,奇数索引元素是分隔符。根据我在re.split
中使用的模式,分隔符是“就绪”时间(不需要零填充)。然后我在列表的每个偶数索引元素(非“就绪”小时)上使用re.sub
,将每1或2位数字视为一个小时,并将其替换为紧跟:00
的数字您可以使用负向后看和负向前看
(?<!(:)\d)\d(?!(:|\d))
https://regex101.com/r/nAQh3e/4 这将挑选出之前或之后没有数字,并且还没有:
的数字相关问题 更多 >
编程相关推荐