我有一根绳子
string: Octane_2022.1.0.6_Houdini_19.5.493_OSX.zip
和正则表达式
regex_search('[0-9]{2}.[0-9]')
这将得到2022年。预期结果是19.5,无论该字段中有什么。本质上,我需要总是收集这个安装程序的基本版本号。当里面没有年份时,它工作得很好,但是我如何强迫我的正则表达式只在它是2位数+“.”+ 1位数时才得到它呢?
19.5
ozxc1zmp1#
声明变量
version_regex: '^\d{2}\.\d{1}.*$' version: "{{ string| split('_')| select('regex', version_regex)|first }}" major: "{{ version|split('.')|first }}" major_minor: "{{ version|splitext|first }}" patch: "{{ version|split('.')|last }}"
给予
version: 19.5.493 major: 19 major_minor: 19.5 patch: 493
详情:给定字符串
拆分字符串
arr: "{{ string|split('_') }}"
arr: - Octane - 2022.1.0.6 - Houdini - 19.5.493 - OSX.zip
选择 "为2位+'.'+1位的项目"
version: "{{ arr|select('regex', version_regex)|first }}" version_regex: '^\d{2}\.\d{1}.*$'
version: 19.5.493
如果版本的格式是语义版本化(主要版本、次要版本、补丁),则拆分项目
major: "{{ version|split('.')|first }}" major_minor: "{{ version|splitext|first }}" patch: "{{ version|split('.')|last }}"
major: 19 major_minor: 19.5 patch: 493
完整的测试行动手册示例
- hosts: localhost vars: string: Octane_2022.1.0.6_Houdini_19.5.493_OSX.zip arr: "{{ string|split('_') }}" version_regex: '^\d{2}\.\d{1}.*$' # version: "{{ arr|select('regex', version_regex)|first }}" version: "{{ string| split('_')| select('regex', version_regex)|first }}" major: "{{ version|split('.')|first }}" major_minor: "{{ version|splitext|first }}" patch: "{{ version|split('.')|last }}" # major_minor: "{{ version|split('.')[:2]|join('.') }}" tasks: - debug: var: arr - debug: var: version - debug: msg: | major: {{ major }} major_minor: {{ major_minor }} patch: {{ patch }}
1qczuiv02#
你可以用这个正则表达式
Octane_(.*(?=\_Houdini))_Houdini_(.*(?=\_))
它将返回两组值
19.5.493
这个正则表达式是如何工作的
(?=\_)
使用正向前查找匹配所需的标识符,在本例中,第一组为_Houdini,第二组为_
_Houdini
_
js81xvg63#
我们可以通过使用前瞻来向后工作:
(?<=_)\d{2}\.\d(?=\.\d+_[A-Z]+\.zip)
它只匹配前面有下划线的字符串,然后查找两个数字,接着是".",然后是一个数字,并且只匹配前面有另一个点、一个或多个数字、下划线、几个大写字母,然后是文字".zip"的字符串。Try it .
"."
".zip"
3条答案
按热度按时间ozxc1zmp1#
声明变量
给予
详情:
给定字符串
拆分字符串
给予
选择 "为2位+'.'+1位的项目"
给予
如果版本的格式是语义版本化(主要版本、次要版本、补丁),则拆分项目
给予
完整的测试行动手册示例
1qczuiv02#
你可以用这个正则表达式
它将返回两组值
19.5.493
这个正则表达式是如何工作的
使用正向前查找匹配所需的标识符,在本例中,第一组为
_Houdini
,第二组为_
js81xvg63#
我们可以通过使用前瞻来向后工作:
它只匹配前面有下划线的字符串,然后查找两个数字,接着是
"."
,然后是一个数字,并且只匹配前面有另一个点、一个或多个数字、下划线、几个大写字母,然后是文字".zip"
的字符串。Try it .