在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
必须是匹配的一部分。