首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用regex获取菜单索引与python一起失败,联机工作。

使用regex获取菜单索引与python一起失败,联机工作。
EN

Stack Overflow用户
提问于 2015-06-12 09:45:31
回答 3查看 72关注 0票数 0

我想用python提取菜单索引。菜单索引是这样的一棵树:

代码语言:javascript
复制
1.
1.1.
1.1.1.
2.
3.1.
3.2.

为了找到这一点,我编写了以下代码:

代码语言:javascript
复制
first = re.findall(r"[0-9]{1}[.]{1}(?:([0-9][.])?(?:([0-9]?[.]?)))" , menu)

这不起作用,但当我将regex放到联机regex工具(http://www.regexr.com/)中时,它就能工作了。

这怎麽可能?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-12 09:49:50

实际上,您可以将正则表达式减少很多,如

代码语言:javascript
复制
re.findall(r"[0-9]\.(?:[0-9]\.){,2}" , menu)

它做什么?

  • [0-9]匹配数字。我已经放弃了{1},因为这很简单,因为这个模式与单个字符匹配。
  • \.匹配.,逃脱了特殊意义。
  • (?:[0-9]\.){,2}匹配数字,其次是.,最小为零次,最大为2次。

测试

代码语言:javascript
复制
>>> 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.']
票数 1
EN

Stack Overflow用户

发布于 2015-06-12 09:47:16

代码语言:javascript
复制
[0-9][.](?:(?:[0-9][.])?(?:(?:[0-9]?[.]?)))

您需要创建所有的capturing groups non capturingre.findall给出了所有groups的列表,如果有present.You有2组,那么您可能只获得those.See演示。

https://regex101.com/r/hI0qP0/5

您还可以使用(?:[0-9][.])+(?:[0-9][.]){1,3}

见演示。

https://regex101.com/r/hI0qP0/6

票数 1
EN

Stack Overflow用户

发布于 2015-06-12 16:02:33

允许章节和章节有任意数量的数字可能更为谨慎(例如,可能有10个以上的章节或10个以上的项目/子项目)。在这种情况下,你可以只需要

(\d+)\.

此正则表达式在句点之前查找数字并与数字匹配;因此,对于单行,您将得到如下结果:

代码语言:javascript
复制
>>> re.findall(r"(\d+)\." , "3.2.1.")
['3', '2', '1']

如果将正则表达式应用于整个字符串,则会按顺序获得所有数字;例如,对于字符串['1', '1', '1', '1', '1', '1', '2', '3', '1', '3', '2', '3']。我不太明白你想要匹配哪些数据,或者你想用它做什么,所以,好吧,根据口味来调整。:-)

要获得索引中包含数字的列表,可以使用:

代码语言:javascript
复制
>>> [re.findall(r"(\d+)", i) for i in string.split('\n')]
[['1'], ['1', '1'], ['1', '1', '1'], ['2'], ['3', '1'], ['3', '2'], ['3', '3']]

干杯,保罗

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30800046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档