2013-07-31 42 views
0

我有以下代码:为什么下面的正则表达式在Python中不起作用?

regularexpression = r'([-\w]*\w)? ?: ?([-"\#\w\s_]*\w?);' 
outputfr = re.findall(regularexpression, inputdata, re.IGNORECASE) 
return data 

它应该抓的话,连字符和其他字符,在结束“;”。所以:

(hello-nine: hello, six, seven; hello-five: six eight)将输出为[(“你好九”,“你好,六,七”),(“你好五”,“六八”)

如果final-number: "seventy", "sixty", "fifty", forty是用户的一部分输入(inputdata),regularexpression并不能捕捉它。我想让它输出为[('final-number', '"seventy", "sixty", "fifty", "forty")]

这是为什么?

+0

你能不能解释一下什么是正则表达式应该赶上吧。并提供* inputdata的* actual *示例,您期望*匹配的内容以及实际获得的内容。 – Hamish

+0

我刚刚添加了更多信息,对不起。 – eltb

+0

您的模式不处理输入字符串中的逗号。 – Blckknght

回答

3

在你的正则表达式,第二组:

([-"\#\w\s_]*\w?) 

需要进行更改,以便它将匹配逗号:

([-"\#\w\s_,]*\w?) 
0

你的榜样输入 - >输出并不一致。在第一种情况下,逗号分隔的项目保持在一起,但在第二种情况下它们是单独的列表元素。另外,你想去掉括号吗?引号?通过给出inputdata的实际值并说明你想要返回什么来澄清(包括剥去引号,括号)。变量永远不会被分配。

使用.split(";")可能是一个更好的起点......

inputdata = "(hello-nine: hello, six, seven; hello-five: six eight)" 
mylist = inputdata.split(";") 
# here either use regexp or another split, depending on what you want... 
subset = [x.split(":") for x in mylist] 
相关问题