只有在第一种模式不匹配的情况下,我才想尝试第二种模式。在这两种情况下,Match
对象的使用是相同的。有什么办法可以把它缩短吗?
for line in cli.splitlines():
res = re.search('s*(.*) (.*);', line)
if res:
pairs_found[res.groups()[0]] = res.groups()[1]
else:
res = re.search('(w*) (d*) {', line)
if res:
pairs_found[res.groups()[0]] = res.groups()[1]
以下将正则表达式预编译为模式,并使用or
的行为来计算第一个匹配:
pat1 = re.compile('s*(.*) (.*);')
pat2 = re.compile('(w*) (d*) {')
# or forced into one line:
# pat1, pat2 = map(re.compile, ['s*(.*) (.*);', '(w*) (d*) {'])
for line in cli.splitlines():
res = pat1.search(line) or pat2.search(line)
if res:
pairs_found[res.groups()[0]] = res.groups()[1]
在Python中>=3.8,您可以使用赋值表达式来进一步缩短它:
if res := (pat1.search(line) or pat2.search(line)):
pairs_found[res.groups()[0]] = res.groups()[1]
这有帮助吗?
for line in cli.splitlines():
res = re.search('s*(.*) (.*);', line)
if not res: res = re.search('(w*) (d*) {', line)
if res: pairs_found[res.groups()[0]] = res.groups()[1]