Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用正则表达式将一个列表中的字符串元素与另一个列表中的字符串元素进行匹配?_Python_Regex_Python 3.x - Fatal编程技术网

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

Python 如何使用正则表达式将一个列表中的字符串元素与另一个列表中的字符串元素进行匹配?,python,regex,python-3.x,Python,Regex,Python 3.x,我已经创建了一个列表,其中有日期号和员工登录的相应时间。我想知道员工在哪几天没有记录任何表示他/她休假的时间 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

我已经创建了一个列表,其中有日期号和员工登录的相应时间。我想知道员工在哪几天没有记录任何表示他/她休假的时间

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: ']
使用正则表达式,我想找出哪些计时后面没有数字,并相应地更新计数器或记录位置,以计算假期数

因此,第5.0天和第6.0天应记录为假日

我试过在线正则表达式,效果很好。但我就是不知道如何在本地编辑器上实现它。
这里不一定需要正则表达式。如果你只是在时间上进行分割会怎么样:并检查分割的结果。我觉得很干净:

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 

当然,这里有一个假设,即列表中的项目遵循此特定模式。

这里不一定需要正则表达式。如果你只是在时间上进行分割会怎么样:并检查分割的结果。我觉得很干净:

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 

当然,这里有一个假设,即列表中的项目遵循此特定模式。

在您发布的字符串中,您有单词计时:但您的正则表达式只包含计时:这显然不匹配,看起来像是您的输入错误

可以使用一个简单的正则表达式,如果计时是一个可选的空间和至少两个数字,那么你可以考虑定时数据不存在。

下面是一个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

在您发布的字符串中,您有单词计时:但您的正则表达式只包含计时:这显然不匹配,看起来像是您的输入错误

可以使用一个简单的正则表达式,如果计时是一个可选的空间和至少两个数字,那么你可以考虑定时数据不存在。

下面是一个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)

正如@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)
输出:

输出:


想看看你先尝试了什么-张贴的问题似乎根本不包括解决问题的方法。StackOverflow希望您能这样做,因为您的尝试有助于我们更好地了解您的需求。请编辑问题以显示您已尝试的内容,以便说明您遇到的具体障碍。有关更多信息,请参阅并使用。但我不知道如何在编辑器中实现它。我很想看看您首先尝试了什么-张贴的问题似乎根本不包括解决问题的方法。StackOverflow希望您能这样做,因为您的尝试有助于我们更好地了解您的需求。请编辑问题以显示您已尝试的内容,以便说明您遇到的具体障碍。有关更多信息,请参阅并使用。但我不知道如何在编辑器中实现它,所以如果计时后有空格,它会分割元素,对吗?如果它不能拆分,那么受尊敬的一天就打印出来了,对吗?@NeerajLagwankar是的,基本上,如果计时后没有任何内容:,我们就打印出这一天。这是一个非常整洁的过程solution@silverhash是 啊我有我的regex金徽章,为regex问题提供非regex答案:我真的想接受这一点作为答案,但我不能,因为问题是针对regex的。不过,感谢您提供了这个简洁的解决方案@alecxeSo如果计时后有空格,它会分割元素,对吗?如果它不能拆分,那么受尊敬的一天就打印出来了,对吗?@NeerajLagwankar是的,基本上,如果计时后没有任何内容:,我们就打印出这一天。这是一个非常整洁的过程solution@silverhash是 啊我有我的regex金徽章,为regex问题提供非regex答案:我真的想接受这一点作为答案,但我不能,因为问题是针对regex的。不过,感谢您提供了这个简洁的解决方案@alecxeyeah这是我这边的打字错误。我会更新的。是的,这是我这边的输入错误。我会更新的。