用大括号括起来的单词解析字符串以在Python 3.5中进行数组

时间:2018-09-10 08:17:26

标签: python python-3.x

我有一个这样的字符串:

"asdf {FIELD1}\n adf {FIELD2} asdf adsf{FIELD3}asdf {FIELD4}"

我需要的是一个包含字符串“ FIELD1”,“ FIELD2”,“ FIELD3”,“ FIELD4”的数组。换句话说:查找用{和}括起来的所有文本,并将其放入数组中。是否有使用Python 3.5的简便/聪明方法?

2 个答案:

答案 0 :(得分:8)

使用正则表达式很容易,只要括号不能嵌套:

>>> import re
>>> re.findall(r"\{(.*?)\}","asdf {FIELD1}\n adf {FIELD2} asdf adsf{FIELD3}asdf {FIELD4}")
['FIELD1', 'FIELD2', 'FIELD3', 'FIELD4']

findall可以方便地创建输入中所有匹配表达式的list

\{(.*?)\}表达式提取花括号之间的数据(由于在正则表达式语言中是特殊的(重复组),因此必须转义),即使在此特定上下文中未对它们进行解释,因此它们可以被省略)。

括号用于仅提取非大括号部分,.*?确保与最接近的右大括号匹配(非贪婪模式)。

对正则表达式使用原始字符串前缀也是一种好习惯(即使在这里不是绝对有用的,它也避免了臭名昭著的\1\b陷阱)

答案 1 :(得分:2)

出于完整性考虑,您还可以使用str.split获得所需的输出:

s = "asdf {FIELD1}\n adf {FIELD2} asdf adsf{FIELD3}asdf {FIELD4}"
[i.split('}')[0] for i in s.split('{')[1:]]