我有以下格式的列表:
s = "['abc', 'xxx', '3c2', '111112', 'x']"
我如何获得元素“1” - [
之后但,
之前的项目。到目前为止,我有:
re.search(r'[.+,',s)
但它太“贪心”了。什么是正确的正则表达式?
答案 0 :(得分:3)
您的列表似乎是有效的python,因此正则表达式不是一个选项(正则表达式无法可靠地解析编程语言)。请考虑ast.literal_eval
:
>>> s = "['abc', 'xxx', '3c2', '111112', 'x']"
>>> import ast
>>> ast.literal_eval(s)[0]
'abc'
如果你坚持使用正则表达式,你必须创建一个神仙复杂的表达式来匹配python文字。一个只处理单引号字符串的简单例子是:
>>> s = "['abc', 'xxx', '3c2', '111112', 'x']"
>>> import re
>>> str_re = r"'(\\.|[^'])*'"
>>> re.search(str_re, s).group(1)
'abc'
很明显,添加双引号,多引号,原始字符串和字节字符串,最终添加各种数字格式将是一项繁琐而毫无意义的工作;)
答案 1 :(得分:1)
使用正则表达式'[^,]+'
或者如果您想在单引号内捕获值,请使用捕获组'([^,]+)'
和re.search().group(1)
。
re.search(r"'[^,]+'",s).group()
输出:
'abc'
答案 2 :(得分:1)
import re
s = "['abc', 'xxx', '3c2', '111112', 'x']"
m = next(re.finditer(r"'([^']+)'", s))
print(m.group())