使用Python正则表达式获取字段值

2024-10-03 21:31:08 发布

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

这是我试图从中获取信息的文件中的两行的示例。你知道吗

...
{ "SubtitleSettings_REPOSITORY", FieldType_STRING, (int32_t)REPOSITORY},
{ "PREFERRED_SUBTITLE_LANGUAGE", FieldType_STRING,SUBTITLE_LANGUAGE},
...

我想做的是找出这个奇怪的数据结构的第三个字段,让给定的字符串与第一个字段匹配,即

SubtitleSettings_REPOSITORY => REPOSITORY
PREFERRED_SUBTITLE_LANGUAGE => SUBTITLE_LANGUAGE

我的Python代码中的regx只能处理第二行,但不能处理第一行。我怎样才能改进它?你知道吗

import re
...
#field is given a value in previous code, can be "SubtitleSettings_REPOSITORY", or "PREFERRED_SUBTITLE_LANGUAGE"
match = re.search(field+'"[, \t]+(\w+)[, \t]+(\w+)', src_file.read(), re.M|re.I)
return_value = match.group(2)

Tags: 文件re示例数据结构fieldstringvaluerepository
2条回答
import re
with open("input.txt") as f:
  pattern = "\{ \"(.+)\",.+,(.+)\}"
  for line in f:
    first, third = re.findall(pattern, line.strip())[0]
    print first.strip(), "=>", third.strip()

印刷品

SubtitleSettings_REPOSITORY => (int32_t)REPOSITORY
PREFERRED_SUBTITLE_LANGUAGE => SUBTITLE_LANGUAGE

其中input.txt包含

{ "SubtitleSettings_REPOSITORY", FieldType_STRING, (int32_t)REPOSITORY},
{ "PREFERRED_SUBTITLE_LANGUAGE", FieldType_STRING,SUBTITLE_LANGUAGE}

细分:

  • \{ \"(.+)\"匹配结构为{+space+“+text+”的字符串并提取text
  • ,.+,(.+)\}匹配结构为、+text1+、+text2+}的字符串,并提取text2

您可以插入(?:\(\w+\))?,这允许(并忽略)括号中的可选单词:

match = re.search(field+'"[, \t]+(\w+)[, \t]+(?:\(\w+\))?(\w+)', line, re.M|re.I)

这样,行就匹配了,您可以得到所需的'REPOSITORY'。你知道吗

相关问题 更多 >