2024-04-20 01:07:52 发布
网友
我想用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/)中时,它就起作用了。你知道吗
这怎么可能?你知道吗
实际上,你可以把regex减少很多
re.findall(r"[0-9]\.(?:[0-9]\.){,2}" , menu)
它做什么?
[0-9]匹配数字。我已经删除了{1},因为这很简单,因为这个模式只匹配一个字符。
[0-9]
{1}
\.匹配.,逃脱了特殊的含义。
\.
.
(?:[0-9]\.){,2}匹配后跟.的数字,最小为零次,最大为2次。
(?:[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.']
[0-9][.](?:(?:[0-9][.])?(?:(?:[0-9]?[.]?)))
你需要把所有的capturing groupsnon capturing。re.findall列出所有groups如果有的话现在。你呢有2组,这样你可能只得到那些。看到了吗演示。你知道吗
capturing groups
non capturing
re.findall
groups
https://regex101.com/r/hI0qP0/5
也可以使用(?:[0-9][.])+或(?:[0-9][.]){1,3}。你知道吗
(?:[0-9][.])+
(?:[0-9][.]){1,3}
请参见演示。你知道吗
https://regex101.com/r/hI0qP0/6
更为谨慎的做法是允许章节有任意数量的数字(即可能有10多个章节或10多个项目/子项目)。那样的话,你可以用
(\d+)\.
这个正则表达式在句点之前查找数字并匹配这些数字;因此,对于一行:
>>> re.findall(r"(\d+)\." , "3.2.1.") ['3', '2', '1']
如果您将regex应用于整个字符串,您将按顺序获得所有数字;即,对于您的字符串,['1', '1', '1', '1', '1', '1', '2', '3', '1', '3', '2', '3']。我不太明白你想匹配哪些数据,或者你想用它做什么,所以,好吧,调整一下口味。:-)
['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']]
干杯, 保罗
实际上,你可以把regex减少很多
它做什么?
[0-9]
匹配数字。我已经删除了{1}
,因为这很简单,因为这个模式只匹配一个字符。\.
匹配.
,逃脱了特殊的含义。(?:[0-9]\.){,2}
匹配后跟.
的数字,最小为零次,最大为2
次。测试
你需要把所有的
capturing groups
non capturing
。re.findall
列出所有groups
如果有的话现在。你呢有2
组,这样你可能只得到那些。看到了吗演示。你知道吗https://regex101.com/r/hI0qP0/5
也可以使用
(?:[0-9][.])+
或(?:[0-9][.]){1,3}
。你知道吗请参见演示。你知道吗
https://regex101.com/r/hI0qP0/6
更为谨慎的做法是允许章节有任意数量的数字(即可能有10多个章节或10多个项目/子项目)。那样的话,你可以用
(\d+)\.
这个正则表达式在句点之前查找数字并匹配这些数字;因此,对于一行:
如果您将regex应用于整个字符串,您将按顺序获得所有数字;即,对于您的字符串,
['1', '1', '1', '1', '1', '1', '2', '3', '1', '3', '2', '3']
。我不太明白你想匹配哪些数据,或者你想用它做什么,所以,好吧,调整一下口味。:-)要获取索引中包含数字的列表,可以使用:
干杯, 保罗
相关问题 更多 >
编程相关推荐