python - 在python中使用正则表达式从多种格式的字符串中提取字符串和数字?
问题描述
我正在尝试使用特定格式的正则表达式解析字符串,以从中获取详细信息。我可以有两种格式的字符串 -
第一种格式
一种方法是拥有一个 foldername-version.tgz
. 这里foldername
可以是任何格式的任何字符串。它可以有另一个或多个-
,或者其他任何东西。
例如:
- hello-1234.tgz:这应该给我
FolderName
ashello
和Version
as1234
- world-12345.tgz:这应该给我
FolderName
asworld
和Version
as12345
- hello-21234-12345.tgz:这应该给我
FolderName
ashello-21234
和Version
as12345
- hello-21234-a-12345.tgz:这应该给我
FolderName
ashello-21234-a
和Version
as12345
第二种格式
另一种方法是拥有foldername-version-environment.tgz
. 在这种情况下也foldername
可以是任何格式的任何字符串。环境字符串也 只能是dev
,和其他stage
,prod
所以我也需要添加检查。
例如:
- hello-1234-dev.tgz:这应该给我
FolderName
ashello
和Version
as1234
- world-12345-stage.tgz:这应该给我
FolderName
asworld
和Version
as12345
- hello-21234-12345-prod.tgz:这应该给我
FolderName
ashello-21234
和Version
as12345
- hello-21234-a-12345-prod.tgz:这应该给我
FolderName
ashello-21234-a
和Version
as12345
问题陈述
所以使用上述两种格式 - 我需要从我的字符串中提取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]
我在这里做错了什么?
解决方案
我会使用:
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
推荐阅读
- angular - 在 Angular 中多次嵌入一个组件?
- javascript - 如何使用轨道控制添加不同的相机?
- r - 保留所有不同行时如何指定要排除的列?
- javascript - MomentJS:显示两个任意日期之间的格式化范围
- zurb-foundation - 如何在基础 6 中使用 readmore.js
- java - TestNG 断言似乎不适用于 Cucumber / Gherkin Doc Strings?
- django - 如何只允许特定国家的用户访问我的 django 网站?
- javascript - 如何检查我的对象是否存在于 javascript 地图中?
- c# - ILMerge 抛出 System.OutOfMemoryException
- javascript - 找不到名称“firebase”.ts(2304)