Python正则表达式re.compile()匹配字符串
我正在尝试通过Python的正则表达式从一个字符串中提取版本号...
给定的文件名是:facter-1.6.2.tar.gz
在循环内部时:
import re
version = re.split('(.*\d\.\d\.\d)',sfile)
print version
我该如何把1.6.2这部分提取到version变量中呢?
3 个回答
0
>>> re.search(r"\d+(\.\d+)+", sfile).group(0)
'1.6.2'
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。
2
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这个时候,我们可以去一些技术论坛,比如StackOverflow,去寻求帮助。在这些论坛上,很多人会分享他们的经验和解决方案。
当你在论坛上提问时,记得把问题描述清楚,包括你遇到的错误信息和你尝试过的解决方法。这样其他人才能更好地理解你的问题,并给出有效的建议。
同时,查看别人提问和回答的问题也是一个很好的学习方式。你可以从中学到很多实用的知识,帮助你更好地解决自己的编程问题。
总之,利用好这些技术社区,可以让你在编程的路上走得更顺利。
match = re.search(r'\d\.\d\.\d', sfile)
if match:
version = match.group()
2
两个逻辑问题:
1) 既然你只想要 1.6.2 这一部分,那么在第一个数字前面的 .*
部分就不需要捕捉了,所以它放在了括号外面。
2) 你只想要找到这个模式并提取出来,使用 re.split 是没有意义的。相反,应该使用 re.match
。这样你会得到一个匹配对象,你可以用它的 .group()
方法来获取实际匹配的文本。“group 0” 是整个匹配的模式,“group 1” 是第一个括号内匹配的内容,等等。
>>> re.match('.*(\d\.\d\.\d)', 'factor-1.6.2.tar.gz').group(1)
'1.6.2'
虽然其他答案提到,其实匹配 .*
部分也没什么意义,因为我们可以直接 搜索 只包含我们想要的部分的字符串。这会在字符串的任何位置查找模式(而匹配是期望在开头)。由于我们不需要括号来让模式在逻辑上有效,而且因为我们现在要使用整个匹配的部分,所以也不再需要括号了。
>>> re.search('\d\.\d\.\d', 'factor-1.6.2.tar.gz').group(0)
'1.6.2'