0

我有以下代码:

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-5', '六八')

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

为什么是这样?

4

2 回答 2

3

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

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

需要更改以匹配逗号:

([-"\#\w\s_,]*\w?)
于 2013-08-01T00:04:17.723 回答
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]
于 2013-08-01T00:32:07.450 回答