我有一个这样的字符串:
"asdf {FIELD1}\n adf {FIELD2} asdf adsf{FIELD3}asdf {FIELD4}"
我需要的是一个包含字符串“ FIELD1”,“ FIELD2”,“ FIELD3”,“ FIELD4”的数组。换句话说:查找用{和}括起来的所有文本,并将其放入数组中。是否有使用Python 3.5的简便/聪明方法?
答案 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:]]