Python2.7正则表达式,格式为多个列表项

2024-04-25 07:17:09 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我想在一个字符串中找到所有引用“AM”和“PM”的时间表达式。让我们暂时忽略我可以使用“[AP]M”来实现这一点(因为我实际上是从一个键是语言代码的字典中提取有效字符串列表['AM','PM'])。我想同时寻找两者,就像这样:

foo = ['am','pm']
separator = ':'
timex = re.compile('(1[012]|[1-9])%s([0-5][0-9])( %s)?' % (separator, foo), re.I)

bar = "It's 6:00 pm, do you know where your brain is?"

上面写的timex并没有告诉我我想要什么:它只匹配pm中的p。(它似乎将列表元素的所有字符都视为[ampm]。)

我不想在字符串上做两次传递(am和pm各一次)。你知道吗

有没有一个很好的Pythonic方法来为foo中的每一个项目做一次传递?你知道吗


Tags: 字符串代码re语言列表foo表达式时间
1条回答
网友
1楼 · 发布于 2024-04-25 07:17:09

以下是我插入要搜索的任意正则表达式项列表的方式:

import re

foo = ['am','pm']
timex = re.compile('({foo})'.format(foo='|'.join(foo)))

bar = "It's 6:00 pm, do you know where your brain is?"

timex.findall(bar)

退货

['pm']

您可以捕获更多:

>>> timex = re.compile(r'(\d{{1,2}}:\d{{2}})\s*({foo})'.format(foo='|'.join(foo)))
>>> timex.findall(bar)
[('6:00', 'pm')]

相关问题 更多 >