如何解决Python重新模块我在REGEX表达式中的括号中遇到问题
我是一名初学者程序员,最近我开始学习如何为Python使用正则表达式模块。 在各种网站上阅读了理论和示例之后,我决定自己亲自研究一下REGEX,以进行一些实践。但是我偶然发现了一个问题,我无法解决问题。
只要正则表达式简单,我想我就知道发生了什么,但是当()括号出现时,我的逻辑就完全崩溃了。我对REGEX的理解显然有一个巨大的漏洞,我需要帮助才能找到它。
这是我的问题的示例:
text= "Some numbers here: 1,12,123,123.4,-123.45,123456."
option1= re.findall(r"-?[0-9]+\.?[0-9]*",text)
print(option1)
option2= re.findall(r"-?[0-9]+\.?[0-9]+",text)
print(option2)
option3= re.findall(r"-?[0-9]+(\.[0-9]+)?",text)
print(option3)
我得到以下输出:
['1','12','123','123.4','-123.45','123456.']
['12','123456']
['','','.4','.45','']
我的问题是:为什么选项3的结果是“ [”,“,”,“。4”,“。45”,“]]”而不是“ ['1” '12 ','123','123.4','-123.45','123456']“
现在,我将描述我的思考过程,因此也许你们会更容易地指出我在这里做错了什么。我想我了解option1和option2中发生的事情,因为结果恰好是我的预期。
在第一个表达式中,有“-?”因此,“-”开头是可选字符,后接[0-9] +,该字符至少与一位数字匹配。然后是\。?好单。字符可以出现在数字之后,最后是[0-9] *,这意味着最后可以有另一个0或多个数字。输出正是我所期望的。每个数字都匹配,包括123456。(带点)。
在第二个表达式中,所有内容与第一个表达式相同,除了表达式以[0-9] +插入[0-9] *结束。如我所料,输出类似,但是123456匹配时没有“。”(因为“。”之后必须至少有一位数字)。但是,“ 1”不再匹配,因为出现了[0-9] +部分两次,因此匹配至少需要两位数字。
在第三个选项中,我想获得“ 1”匹配和“ 123456”匹配而不包含“”。 我的推理是这样的:-?作为可选的“-”,将[0-9] +用作至少一位数字,然后将“ \。[0-9] +”(点和至少一位数字)作为可选块,因此将其放在括号中并放置?之后,整个“ \。[0-9] +”块可能会发生一次,也可能根本不会发生。
但是,不是获得“ [['1''12','123','123.4','-123.45','123456']” 我得到了这个:“ [”,“,”,“。4”,“。45”,“]””
我不知道发生了什么。括号部分似乎正常工作(.45,.4),但是表达式的其余部分似乎已损坏。我对方括号的理解显然有一个漏洞,如果有人帮助我看看我在做什么/理解错了,我将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。