使用正则表达式

时间:2018-03-13 23:07:18

标签: python regex

我有以下格式的列表:

s = "['abc', 'xxx', '3c2', '111112', 'x']"

我如何获得元素“1” - [之后但,之前的项目。到目前为止,我有:

re.search(r'[.+,',s)

但它太“贪心”了。什么是正确的正则表达式?

3 个答案:

答案 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())