2011-10-18 45 views
-2

我有对象的样本串像这样:匹配一个逗号分隔的列表

[{HST, AKST, PST, MST, CST, EST, AST, WAT, CET, GMT, EET, CCT, AWST, JST, EAST, NZT} {0:10}] 

我感兴趣的括号内的第一组项目:

{HST, AKST, PST, MST, CST, EST, AST, WAT, CET, GMT, EET, CCT, AWST, JST, EAST, NZT} 

我想解析和集把它列入一个列表。我正在使用python。

+3

我有点困惑。你想要一个正则表达式来单独匹配这个列表中的所有元素?或者你想将列表拆分成一个数组或更容易处理的东西? – ewok

+0

后者。分裂不起作用,因为它是较大字符串的一部分。 –

+0

您是否想要确定在逗号分隔列表中是否找到给定变量的值?什么是你的逗号分隔列表存储在?你提到它是一个更大的字符串的一部分。请给我们更多的信息。 –

回答

2
for match in re.finditer("(?i)[a-z]+", subject): 
    # match start: match.start() 
    # match end (exclusive): match.end() 
    # matched text: match.group() 

这将帮助您遍历列表的“元素”。

编辑:你现在写它是一个较大的字符串的一部分。这改变了原来的问题。

for match in re.finditer(r"(?i)(?:(\b[a-z]+\b)[,}])", subject): 
    # match start: match.start() 
    # match end (exclusive): match.end() 
    # matched text: match.group(1) 

这将找到您的列表并提取其中的单词。

+0

它的工作原理。谢谢。 –

+0

@AlexBliskovsky不客气。 – FailedDev

0

正则表达式只是创建令牌,之后你需要做些东西。幸运的是,python的标准正则表达式库包含一个函数,可以为您提供它找到的所有值。

import re 
input = '{HST, AKST, PST, MST, CST, EST, AST, WAT, CET, GMT, EET, CCT, AWST, JST, EAST, NZT}' 
data = re.findall(r'\w+', input) 

此外,这将找到所有的“单词”。根据什么是有效的输入,你可能需要一个更强大的正则表达式。其他细节在这方面会有所帮助。

0

要拆分字符串,可以使用string.split(s,',')。这将返回一个基于s的字符串列表,该字符串被分割为字符','。

http://docs.python.org/library/stdtypes.html#str.split

得到的只是这个名单出来一个更大的字符串,分裂关于“{”和“}”字符第一。