繁体   English   中英

如何使用正则表达式将一个列表中的字符串元素与另一个列表进行匹配?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM