[英]How to match string elements from one list with another list using regex?
我创建了一个日期为天的列表。 以及员工登录的时间。我想找出员工在哪几天没有记录任何表明他/她休假的时间。
pattern = ["Timings: "]
timingData = ['Day: 1.0 Timings: 09:52 17:46 ', 'Day: 2.0 Timings: 09:29 09:29 17:54 ', 'Day: 3.0 Timings: 09:28 09:28 17:42 ', 'Day: 4.0 Timings: 11:18 17:47 ', 'Day: 5.0 Timings: ', 'Day 6.0 Timings: ']
我想使用正则表达式查找哪些时间后面没有数字,并更新计数器或相应地记录位置以计算假期数。
因此,Day:5.0和Day:6.0应该被记录为假期。
我尝试了有效的在线正则表达式。 但是我无法弄清楚如何在本地编辑器上实现它。 链接
您在这里不一定需要正则表达式。 如果您只是拆分“ Timings:”,然后检查拆分结果,该怎么办? 对我来说看起来很干净:
In [1]: timingData = ['Day: 1.0 Timings: 09:52 17:46 ', 'Day: 2.0 Timings: 09:29 09:29 17:54 ', 'Day: 3.0 Timings: 09:28 09:28 17:42 ', 'Day: 4.0 Timings: 11:18 17:47 ', 'Day: 5.0 Timings: ', 'Day 6.0 Timings: ']
In [2]: for item in timingData:
day, timing = item.split("Timings: ")
if not timing:
print(day)
Day: 5.0
Day 6.0
当然,这里有一个假设,即列表中的项目遵循此特定模式。
在您发布的字符串中,您有单词Timings:
但您的正则表达式仅包含Timing:
这显然不匹配,从您的角度来看,它似乎是一个错字。
您可以使用简单的正则表达式,如果Timings:
后接可选空格和至少两位数字,则可以认为存在计时数据,否则就不存在。
这是相同的python代码,
import re
timingData = ['Day: 1.0 Timings: 09:52 17:46 ', 'Day: 2.0 Timings: 09:29 09:29 17:54 ', 'Day: 3.0 Timings: 09:28 09:28 17:42 ', 'Day: 4.0 Timings: 11:18 17:47 ', 'Day: 5.0 Timings: ', 'Day 6.0 Timings: ']
for s in timingData:
if (re.match(r'.*Timings:\s*\d{2}:.*', s)):
print (s + ' --> ' + "Matched")
else:
print (s + ' --> ' + "Didn't match")
可以像您所期望的那样提供以下输出,
Day: 1.0 Timings: 09:52 17:46 --> Matched
Day: 2.0 Timings: 09:29 09:29 17:54 --> Matched
Day: 3.0 Timings: 09:28 09:28 17:42 --> Matched
Day: 4.0 Timings: 11:18 17:47 --> Matched
Day: 5.0 Timings: --> Didn't match
Day 6.0 Timings: --> Didn't match
正如@alecxe所指出的,正则表达式在此问题上是过大的,但是如果您确实需要,我想您可以简单地执行以下操作:
import re
holidays = []
timingData = ['Day: 1.0 Timings: 09:52 17:46 ', 'Day: 2.0 Timings: 09:29 09:29 17:54 ', 'Day: 3.0 Timings: 09:28 09:28 17:42 ', 'Day: 4.0 Timings: 11:18 17:47 ', 'Day: 5.0 Timings: ', 'Day 6.0 Timings: ']
for t in timingData:
a = re.search('(Timings:\s)[\w:\s]+',t)
if a == None: #No matches found
holidays.append(t[:8])
print(holidays)
import re
timingData = ['Day: 1.0 Timings: 09:52 17:46 ', 'Day: 2.0 Timings: 09:29 09:29 17:54 ', 'Day: 3.0 Timings: 09:28 09:28 17:42 ', 'Day: 4.0 Timings: 11:18 17:47 ', 'Day: 5.0 Timings: ', 'Day 6.0 Timings: ']
regexedData = []
for i in timingData:
regexedData.append(re.findall(r'(.+?)(Timings:\s)$',i))
for i in regexedData:
if i:
print(i[0][0])
输出:
C:\Users\Desktop>py x.py
Day: 5.0
Day 6.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.