我有以下代码:
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")]
为什么会这样?
答案 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]