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

在python中的字符串中查找匹配的值,python,Python,基本上,我想做下面的事情,我有一个充满这样行的文件 Queue SIZE=“1024”QID=“8”TYPE=“IOSQ”ADDRESS=“0x218464000” 我需要做以下工作 If(“IOSQ”在第行):然后捕获地址的值,即“0x218464000” 如何用Python编写脚本?您可以使用正则表达式 import re my_string = 'Queue SIZE="1024" QID="8" TYPE="IOSQ" ADDRESS="0x218464000"' pattern =

基本上,我想做下面的事情,我有一个充满这样行的文件

Queue SIZE=“1024”QID=“8”TYPE=“IOSQ”ADDRESS=“0x218464000”

我需要做以下工作

If(“IOSQ”在第行):
然后捕获地址的值,即
“0x218464000”


如何用Python编写脚本?

您可以使用正则表达式

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到尽可能少(直到找到完全匹配为止)括号使<代码> FUNDALL < /代码>只返回括号的内容。<代码> \d>代码>表示数字0到9。<代码> +代码>表示前面的字符中的一个或多个匹配。

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

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(“')
一种方法是使用
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”的顺序,如果需要,您可以随时访问其他键的值。

这条队列大小=“1024”QID=“8”TYPE=“IOSQ”ADDRESS=“0x218464000”行从何而来?你是从文件里读的吗?你的作品在哪里?尝试显示一些代码,人们会很乐意帮助你,编辑我的答案删除了你的“接受答案”。无论如何,我添加了一些关于reg-ex的每个部分如何工作的解释,以便您以后可以自己使用它。您还可以查看文档以了解更多详细信息。可能是一个更合适的正则表达式:
re.search('ADDRESS=“(.*)”,my_string)。组(1)
@JonClements您在
ADDRESS=“
”上的回答是正确的,但我从他的问题中假设
IOSQ
必须是匹配的一部分。