【发布时间】:2020-11-16 08:02:45
【问题描述】:
这是一个按情况切换的样式代码,按预期运行。
我想做的是:
- 通过匹配多个正则表达式 AND,对候选对象进行排序,
- 通过正则表达式分组将其组件解析成片段。
- 正则表达式语法和短语都很好 - 所以最好专注于如何优化(或替换)if 子句本身。
我想在每个分支上重复调用完全相同的 re.match() 2 次是非常低效的。
在 Python 中是否有任何可能的替代或更复杂的方法来“重用” if 语句中使用的 re.match 对象?
尝试搜索最佳实践并阅读手册,但最终一无所获。
不能按照这里的建议分配 re.match() 值或使用 re.compile(),因为我有 elif 子句:
Redundant If Statement and Regex
我可以看到,从 Python 3.8 可以在 if 语句中分配一个变量,但我正在使用 Python 3.7。
How to assign a variable in an IF condition, and then return it?
如果您能提供帮助,我们将不胜感激。
提前致谢。
candidates = [
'WTI CRUDE FUTURE Jul20',
'Crude Oil Option C31',
'O-CLK20_C43.00',
'AMZN US 01/17/20 P1440',
...
]
for item in candidates:
if re.match(r'([\w ]+) FUTURE (\w{3})(\d{2})', item):
redundant_call = re.match(r'([\w ]+) FUTURE (\w{3})(\d{2})', item):
Do something with .group(1), group(2) ...
elif re.match(r'([\w ]+) Option (P|C)([\d\.]+)', item):
redundant_call = re.match(r'([\w ]+) Option (P|C)([\d\.]+)', item):
Do something with .group(1), group(2) ...
elif re.match(r'O-(\w{2,3})([F-Z])(\d{2})_(P|C)([\d.]+)', item):
redundant_call = re.match(r'O-(\w{2,3})([F-Z])(\d{2})_(P|C)([\d.]+)', item):
Do something with .group(1), group(2) ...
...
【问题讨论】:
-
这里缺少选项是为什么 3.8引入了海象运算符。没有它就没有好的解决方案。你能做的最好的就是一堆嵌套的
if/elsecase,因为你必须不断缩进,所以很快就会变得丑陋。