我从一个设备中提取了一个字符串,我必须在其中找到并使用正则表达式匹配其版本。该字符串包含软件的版本号以及其他文本。
形式为1.2.3.x.z-2
基本上它包含数字字母冒号连字符等的混合。 我在正则表达式中匹配什么。
我尝试了字符串中第一个和最后一个数字的索引,并打印了2个索引之间的所有数据。 但这不是字符串中唯一存在的数字。例如,它可能有类似日期的东西。
即使我稍后过滤其他数字,对于遵循这种模式的内容我能匹配什么?
答案 0 :(得分:2)
尝试RegEx \d\.\d\.\d-[a-z]\d\.\d
\d
将匹配数字,\.
将匹配句点,-
将匹配连字符,[a-z]
将匹配小写字母。
答案 1 :(得分:1)
使用regex101和您提供的测试版1.2.3.x.z-2
我想出了
\d*[.]\d*[.]\d*[.][a-z]*[.][a-z]*[-]\d*
用于Python正则表达式
\d
将匹配单个数字,\d*
将匹配任何数字
[.]
获取数字之间的点,与[-]
相同,除了破折号
尝试使用regex101,因为您可以将所有版本号放在测试字符串部分中,它会告诉您尝试的正则表达式是否与它们匹配。
右下角有一个快速参考,告诉你其他正则表达式方法及其工作方式
修改:如果您的版本采用number.number.number-alphabet and number.number
格式,则正则表达式为\d*[.]\d*[.]\d*[-][a-z]* \d*[.]\d*
,假设您的意思是指空间...
答案 2 :(得分:1)
也许你正在寻找这样的东西?
(?:(?:\d+|[a-z])[.-]){2,}(?:\d+|[a-z])
这匹配由数字组或单个小写字符组成的任何序列,由-
或.
加入。必须至少有3(2 + 1)个这样的组才能匹配序列。例如,以下所有内容都匹配:
1.2.3
1.2.3-a
12.5.5
1.2.3.x.z-2
但这些不是:
1.2 (too short)
1.ab.3 (multiple consecutive characters)
1..3.4 (missing group)
1.2.C (upper case character)
表达式的很大一部分重复((?:\d+|[a-z])
),我不确定是否有办法阻止这种情况。