Python re.sub(简单但卡住了)

时间:2014-07-08 23:52:49

标签: python regex

我试图读取此字符串并使用re.sub将其转换为列表,但还没有成功但还不知道原因。

STRING: [Nick('LeaderBot'), 'd3rdwill', 'Willie2']

Expected Outcome: ['LeaderBot', 'd3rdwill', 'Willie2']

我使用的功能是:

def str2list(str2):
'''
Converts a string to a list
:param str2:
:return:
'''
lst = re.sub("\(\[\]\)", '', str2).replace("'", "").strip("()").split(',')
return lst

并且我这样称之为删除Nick(这不是我在代码中列出请求的常规方法:

    orderGroupNick = str2list(STRING.replace("Nick(", ""))

我得到的结果是:

['[LeaderBot)', ' d3rdwill', ' Willie2]']

我已经多次更改了正则表达式以包含'或其他一些格式[和(但最终尚未成功获得清洁清单。

我知道这很简单,不知道为什么我会被困在这里!

5 个答案:

答案 0 :(得分:4)

您在split(',')的字符串上使用[one, two, three] ...此处的[]不会被废弃,之后的空格也不会被删除逗号','。

在废弃前面的split(", ")和最后[之后使用]

答案 1 :(得分:2)

在下面,只需将re.sub命令输出转换为列表。

>>> str
"[Nick('LeaderBot'), 'd3rdwill', 'Willie2']"
>>> re.sub(r'.*\((?=\')|(?<=\')\)?,?\s?]?', r'', str)
"'LeaderBot''d3rdwill''Willie2'"

上述正则表达式匹配所有字符在单引号和单引号内执行字符。 re.sub命令删除所有匹配的字符。

DEMO

答案 2 :(得分:1)

这是一种简单的方法:

subject = "[Nick('LeaderBot'), 'd3rdwill', 'Willie2']"
regex = re.compile(r"'([^']+)'")
print( re.findall(regex, subject) )

输出:['LeaderBot', 'd3rdwill', 'Willie2']

答案 3 :(得分:0)

感谢Unihedron,

最后这有效:

    lst = re.sub("[()]", '', str2).replace("'", "").strip("[]").split(', ')

答案 4 :(得分:0)

您可以使用findall功能获得更清洁的解决方案:

regex = re.compile("\'(.+?)\'")
lst = regex.findall(str2)

你应该得到一个像这样的列表[u'LeaderBot', u'd3rdwill', u'Willie2']