我试图读取此字符串并使用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]']
我已经多次更改了正则表达式以包含'或其他一些格式[和(但最终尚未成功获得清洁清单。
我知道这很简单,不知道为什么我会被困在这里!
答案 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
命令删除所有匹配的字符。
答案 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']