Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python正则表达式提取字段值_Python_Regex - Fatal编程技术网

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

使用Python正则表达式提取字段值,python,regex,Python,Regex,这是一个我试图从中获取信息的文件中的两行的示例 ... { "SubtitleSettings_REPOSITORY", FieldType_STRING, (int32_t)REPOSITORY}, { "PREFERRED_SUBTITLE_LANGUAGE", FieldType_STRING,SUBTITLE_LANGUAGE}, ... 我想做的是找出这个奇怪数据结构的第三个字段,让给定字符串与第一个字段匹配,即 SubtitleSettings_REPOSITORY => R

这是一个我试图从中获取信息的文件中的两行的示例

...
{ "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)
印刷品

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+”的字符串,并提取文本
  • ,.+,(.+)\}
    匹配结构为,+text1+,+text2+}的字符串,并提取text2
您可以插入
(?:\(\w+\))?
,允许(并忽略)括号中的可选单词:

match = re.search(field+'"[, \t]+(\w+)[, \t]+(?:\(\w+\))?(\w+)', line, re.M|re.I)
这样,行匹配,您就可以根据需要获得
'REPOSITORY'

不是
\w
字符类的成员,因此要在这两种情况下获得匹配,您需要描述包含在参数之间的部分,并使其在模式中成为可选的。
match = re.search(field+'"[, \t]+(\w+)[, \t]+(?:\(\w+\))?(\w+)', line, re.M|re.I)