如标题中所述,我想要正则表达式,它将根据我的“查询”按顺序给出结果。
line='VERSION="OTHER" POWER="LOW" FREQ="OFF" MAXTUN="BLER"'**
示例1:
re.findall(r'FREQ="(.*?)"|VERSION="(.*?)"', line, re.MULTILINE)
输出是:
[('', 'OTHER'), ('OFF', '')]
我更喜欢的期望输出是这样的:
['OFF', 'OTHER']
示例2:
re.findall(r'VERSION="(.*?)"|FREQ="(.*?)"', line, re.MULTILINE)
输出是相同的:
[('', 'OTHER'), ('OFF', '')]
我更喜欢的期望输出是这样的:
['OTHER', 'OFF']
有什么建议吗?
附:
请不要问我想要实现什么,并告诉我也许有更好的方法,除非您对此有疑问。
谢谢你!
您可以利用非捕获交替组来匹配VERSION
or FREQ
(可选地在前面加上单词边界,只需检查它是否满足您的要求):
\b(?:VERSION|FREQ)="(.*?)"
See the 正则表达式演示 https://regex101.com/r/U7j8t1/2
Details
-
\b
- 前导词边界
-
(?:VERSION|FREQ)
- 任何一个VERSION
or FREQ
-
="
- a ="
子串
-
(.*?)
- 第 1 组(实际输出findall
): 除换行符之外的任何 0+ 个字符,尽可能少
-
"
- 双引号。
See the Python演示 https://ideone.com/Jv6TXi:
import re
line='VERSION="OTHER" POWER="LOW" FREQ="OFF" MAXTUN="BLER"'
print(re.findall(r'\b(?:VERSION|FREQ)="(.*?)"', line))
# => ['OTHER', 'OFF']
也许更好的想法是捕获键值对并将它们映射到字典:
import re
line = 'VERSION="OTHER" POWER="LOW" FREQ="OFF" MAXTUN="BLER"'
results = re.findall(r'(VERSION|FREQ)="(.*?)"', line)
print(dict(results))
# => {'FREQ': 'OFF', 'VERSION': 'OTHER'}
See the Python演示 https://ideone.com/fULAUW.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)