可以将两行代码合并为一行

时间:2017-06-27 21:20:00

标签: regex python-3.x

搜索数据库以查找匹配项。需要记录匹配以及不匹配,所以我有完整的数据库,但那些匹配我特别需要知道匹配的部分。

serv = ['6:00am-9:00pm', 'Unavailable', '7:00am-10:00pm', '8:00am-9:00pm', 'Closed']
if self.serv[datas] == 'Today':
    clotime.append('')
elif self.serv[data] == 'Tomorrow':
    clotime.append('')
elif self.serv[data] == 'Yesterday':
    clotime.append('')
else:
    clo = re.findall('-(.*?):', self.serv[data])
    clotime.append(clo[0])

大部分数据最终通过re.findall运行,但仍有一些数据仍用于初始if / elif检查。

有没有办法压缩这段代码并使用re.findall完成所有操作,甚至可能只需要一行代码。我需要经历/记录的所有内容(整个数据库),以便在我在地图上显示数据时正确处理数据库。

2 个答案:

答案 0 :(得分:0)

使用锚点可以匹配整个字符串

clo = re.search('^(?:To(?:day|morrow)|Yesterday)$|-(.*?):', self.serv[data])
if clo is not None:
    clotime.append(clo.group(1))

使用您的示例列表:

serv = ['6:00am-9:00pm', 'Unavailable', '7:00am-10:00pm', '8:00am-9:00pm', 'Closed']

clotime = []
for data in serv:
    clo = re.search('^(?:To(?:day|morrow)|Yesterday)$|-(.*?):', data)
    if clo is not None:
        clotime.append(clo.group(1))

print(clotime)

答案 1 :(得分:0)

我会尝试这样的事情:

clo = re.findall('-(\d+):', self.serv[data])
clotime.append(clo[0] if clo else '')

如果我理解你现有的代码,看起来你想在字符串中找不到结束时间的情况下附加一个空字符串?此示例提取结束时间,但只要正则表达式不匹配任何内容,就会使用空字符串。

此外,如果您只是匹配数字,那么最好明确一下。

相关问题