首页 > 解决方案 > 在python中使用正则表达式从多种格式的字符串中提取字符串和数字?

问题描述

我正在尝试使用特定格式的正则表达式解析字符串,以从中获取详细信息。我可以有两种格式的字符串 -

第一种格式

一种方法是拥有一个 foldername-version.tgz. 这里foldername可以是任何格式的任何字符串。它可以有另一个或多个-,或者其他任何东西。

例如:

第二种格式

另一种方法是拥有foldername-version-environment.tgz. 在这种情况下也foldername可以是任何格式的任何字符串。环境字符串也 只能是dev,和其他stageprod所以我也需要添加检查。

例如:

问题陈述

所以使用上述两种格式 - 我需要从我的字符串中提取FolderName和。Version我尝试使用下面的正则表达式,但它不适用于第二种格式的字符串,但我希望我的代码适用于两种格式。

#sample example string which can be in first or second format
exampleString = hello-21234-12345-prod.tgz
build_found = re.search(r'[\d.-]+.tgz', exampleString)
version = build_found.group().replace(".tgz", "")
folderName = exampleString.split(version)[0]

我在这里做错了什么?

标签: pythonregex

解决方案


我会使用:

inp = "some text hello-21234-a-12345.tgz some more text"
parts = re.findall(r'\b([^\s-]+(?:-[^-]+)*)-(\d+)(?:-[^-]+)*\.\w+\b', inp)
print("FolderName: " + parts[0][0])
print("Version: " + parts[0][1])

这打印:

FolderName: hello-21234-a
Version: 12345

推荐阅读