python中正则表达式的用法

2024-04-20 04:48:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的新手,在正则表达式的使用方面需要一些帮助。在

我有一根像这样的绳子:

新版本可用版本:20120418-abcdef-1(基于SDK 0.0.0.1)

从上面的字符串中,我想使用正则表达式提取以下文本

20120418-abcdef-1号 0.0.0.1

我可以通过拆分来实现,但我觉得这是一种无效的方法。我试过使用正则表达式,但不能缩小范围。在

例如,我用

sdk_version = re.search(r"SDK(.*)", lines,)
                    print sdk_version.group(1)

但这给了版本0.0.0.1)以及我不知道如何消除''的偏执。。需要帮忙吗。。在

谢谢 -维杰


Tags: 方法字符串文本版本researchversiongroup
3条回答

好吧,我不知道您的字符串是否与提供的字符串完全相同,但是您提供的字符串的正则表达式将是:

: (.*) \(based on SDK (.*)\)

这将执行以下操作:

-出现:后开始匹配。在

-这将打开一个组(这是正则表达式的特殊构造,允许您稍后引用捕获的值)。在

*-这个部分只匹配所有的内容,直到一个空格。在

\(-这将匹配“real”大括号,而不会打开子组。在

\)-这将匹配“real”右大括号,而不是关闭子组。在

因此在python中,这将是这样的:

^{pr2}$
>>> s = "New builds available Version: 20120418-abcdef-1 (based on SDK 0.0.0.1)"
>>> import re
>>> version = re.compile(r"(?<=Version: )\d*-[a-z]*-\d")
>>> version.search(s).group()
'20120418-abcdef-1'

这个匹配

^{pr2}$

同样

>>> subversion = re.compile(r"(?<=SDK )\d*.\d*.\d*.\d*")
>>> subversion.search(s).group()
'0.0.0.1'

匹配

(preceded by "SDK ")
a string of digits
a dot
a string of digits
a dot
a string of digits
a dot
a string of digits

假设版本号只能包含字母、数字、点和破折号,那么您只需要:

version, sdk = re.findall(r'(?:Version: |SDK )([\w.-]+)', s)

示例:

^{pr2}$

相关问题 更多 >