我有一系列模式,想要将字符串与这些模式匹配,然后返回第一组。我来自scala背景,但发现自己需要在Python中执行相同的操作。无论如何,是否有地图来映射和匹配一组模式?
以下是在scala中的外观
line_no
答案 0 :(得分:1)
这种相对忠实的音译对我有用:
import re
patterns = [
re.compile("([a-zA-Z\\d]{9}-[a-zA-Z\\d]{3})"),
re.compile("([a-zA-Z\\d]{3}-[a-zA-Z\\d]{3}-\\d{4}-\\d{2})"),
re.compile("([a-zA-Z\\d]{5}-[a-zA-Z\\d]{3}-\\d{4})"),
re.compile("([a-zA-Z\\d]{5}-[a-zA-Z\\d]{3}-\\d{4})"),
re.compile("([a-zA-Z\\d]{3}-[a-zA-Z\\d]{3}-\\d{4}-\\d{2})"),
re.compile("([a-zA-Z\\d]{5}-[a-zA-Z\\d]{3}-\\d{4})"),
re.compile("([a-zA-Z\\d!]{2,3}-[a-zA-Z\\d]{2,4}-[a-zA-Z\\d]{3,5}-[\\d]{1,2})"),
re.compile("([a-zA-Z\\d]{3,6}-[a-zA-Z\\d]{3}-[\\d]{1,6})"),
re.compile("([a-zA-Z\\d]{3,6}-[a-zA-Z\\d]{4}-[\\d]{1,6})")
]
sku = "123456789-AAA"
res = filter(lambda x: x is not None, map(lambda x: x.match(sku), patterns))
print res[0].group(1)
最有可能的是,您可以使用更多的Pythonic列表理解功能,但是上述方法非常能反映您的代码。
它有一个缺点-它不会在第一个比赛中停下来,但是会在返回第一个比赛之前评估所有比赛。