我想用python提取菜单索引。菜单索引是这样的一棵树:
1.
1.1.
1.1.1.
2.
3.1.
3.2.为了找到这一点,我编写了以下代码:
first = re.findall(r"[0-9]{1}[.]{1}(?:([0-9][.])?(?:([0-9]?[.]?)))" , menu)这不起作用,但当我将regex放到联机regex工具(http://www.regexr.com/)中时,它就能工作了。
这怎麽可能?
发布于 2015-06-12 09:49:50
实际上,您可以将正则表达式减少很多,如
re.findall(r"[0-9]\.(?:[0-9]\.){,2}" , menu)它做什么?
[0-9]匹配数字。我已经放弃了{1},因为这很简单,因为这个模式与单个字符匹配。\.匹配.,逃脱了特殊意义。(?:[0-9]\.){,2}匹配数字,其次是.,最小为零次,最大为2次。测试
>>> string = """1.
... 1.1.
... 1.1.1.
... 2.
... 3.1.
... 3.2."""
>>> re.findall(r"[0-9]\.(?:[0-9]\.){,2}" , string)
['1.', '1.1.', '1.1.1.', '2.', '3.1.', '3.2.']发布于 2015-06-12 09:47:16
[0-9][.](?:(?:[0-9][.])?(?:(?:[0-9]?[.]?)))您需要创建所有的capturing groups non capturing。re.findall给出了所有groups的列表,如果有present.You有2组,那么您可能只获得those.See演示。
https://regex101.com/r/hI0qP0/5
您还可以使用(?:[0-9][.])+或(?:[0-9][.]){1,3}。
见演示。
发布于 2015-06-12 16:02:33
允许章节和章节有任意数量的数字可能更为谨慎(例如,可能有10个以上的章节或10个以上的项目/子项目)。在这种情况下,你可以只需要
(\d+)\.
此正则表达式在句点之前查找数字并与数字匹配;因此,对于单行,您将得到如下结果:
>>> re.findall(r"(\d+)\." , "3.2.1.")
['3', '2', '1']如果将正则表达式应用于整个字符串,则会按顺序获得所有数字;例如,对于字符串['1', '1', '1', '1', '1', '1', '2', '3', '1', '3', '2', '3']。我不太明白你想要匹配哪些数据,或者你想用它做什么,所以,好吧,根据口味来调整。:-)
要获得索引中包含数字的列表,可以使用:
>>> [re.findall(r"(\d+)", i) for i in string.split('\n')]
[['1'], ['1', '1'], ['1', '1', '1'], ['2'], ['3', '1'], ['3', '2'], ['3', '3']]干杯,保罗
https://stackoverflow.com/questions/30800046
复制相似问题