在python中的字符串中查找匹配的值

2024-09-22 14:27:33 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我想做以下工作,我有一个文件中充满了这样的行

Queue SIZE="1024" QID="8" TYPE="IOSQ" ADDRESS="0x218464000"

我需要做以下工作

If("IOSQ" in line):然后捕获地址的值,即"0x218464000"

如何用Python编写脚本?你知道吗


Tags: 文件in脚本sizeifqueueaddress地址
3条回答

你可以使用正则表达式。你知道吗

import re

my_string = 'Queue SIZE="1024" QID="8" TYPE="IOSQ" ADDRESS="0x218464000"'

pattern = re.compile(r'IOSQ.*?ADDRESS="(\dx\d+)')    
matches = re.findall(pattern, my_string)

print(matches) 

模式是r'IOSQ.*?="(\dx\d+)r'something'是一个原始字符串,您应该始终使用它。然后IOSQ需要这些字母的精确匹配。.*?表示匹配任何字符,从0到尽可能少(直到找到完全匹配)。圆括号使findall只返回圆括号的内容。\d表示数字0到9。+表示前面的一个或多个字符被匹配。你知道吗

一种方法是使用shlex.split标准化数据(引号等),然后构建key=value的dict,如果类型为“IOSQ”,则获取地址(或空白),否则将地址保留为空白,例如:

import shlex

s = 'Queue SIZE="1024" QID="8" TYPE="IOSQ" ADDRESS="0x218464000"'
d = dict(el.partition('=')[::2] for el in shlex.split(s))
# {'QID': '8', 'TYPE': 'IOSQ', 'ADDRESS': '0x218464000', 'SIZE': '1024', 'Queue': ''}
address = d.get('ADDRESS', '') if d.get('TYPE') == 'IOSQ' else ''
# '0x218464000'

这样做的好处是,您不依赖于文本中key=“something”的顺序相同,并且如果以后需要,您可以随时访问其他键的值。你知道吗

如果数据格式良好,您可以考虑:

lst = 'Queue SIZE="1024" QID="8" TYPE="IOSQ" ADDRESS="0x218464000"'.split()

def make_dict(lst):
    return dict([tuple(item.split('=')) for item in lst])

dic = {}
dic[lst[0]] = make_dict(lst[1:])
print dic

它给出:

{'Queue': {'QID': '"8"', 'ADDRESS': '"0x218464000"', 'TYPE': '"IOSQ"', 'SIZE': '"1024"'}}

然后可以访问值dic[lst[0]].get('ADDRESS', 'no address').strip('"')。你知道吗

相关问题 更多 >