首页 > 解决方案 > 使用正则表达式搜索字符串的python方式中更好的代码的建议

问题描述

我有一段代码用于搜索特定的地址块并以某种方式格式化结果。

例如,我有一个输入字符串“70D76320 BEG 701D135D 702D72FC END EAR0 00000000 0000000”。在这种情况下,我需要提取“BEG”和“END”之间的地址,即“701D135D”和“702D72FC”,并按以下方式对其进行格式化:

[0]0x701D135D  
[1]0x702D72FC  

为此,我编写了一个脚本:

import re
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--address', help='Parse the input addresses')
args = parser.parse_args()
addressInfo = args.address

filter = re.compile(r'(BEG )((\w{8})\s)+(END )')
btInfo = filter.search(addressInfo)

print ("\n")
addresses = btInfo.group().split()
for idx in range(len(addresses)):
    if((addresses[idx] != 'BEG') and (addresses[idx] != 'END')):
        print ("[%d]0x%s" %(idx-1, addresses[idx]))

当我查看代码时,它更像是 c/c++ 代码而不是 python。有没有更好的方法在“真正的python风格”中达到同样的效果?</p>

标签: pythonregex

解决方案


没有re, butsplit()和 with enumerate()for 索引:

def get_addresses(input_string):
    for address in input_string.split(' BEG ')[-1].split(' END ')[0].split(' '):
        yield address

foo = "70D76320 BEG 701D135D 702D72FC END EAR0 00000000 0000000"
for idx, address in enumerate(get_addresses(foo)):
    print(f'[{idx}]0x{address}')
  • 使用 f-strings 需要 3.6+

推荐阅读