为什么以下正则表达式在Python中不起作用?

时间:2013-07-31 23:48:10

标签: python regex

我有以下代码:

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)输出为[('hello-nine','hello,six,seven'),('hello-five','six eight')

如果final-number: "seventy", "sixty", "fifty", forty是用户输入(inputdata)的一部分,则regularrexpression不会捕获它。我希望它输出为[('final-number', '"seventy", "sixty", "fifty", "forty")]

为什么会这样?

2 个答案:

答案 0 :(得分:3)

在正则表达式中,第二组:

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

需要更改,以便与逗号匹配:

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

答案 1 :(得分:0)

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

使用.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]