如何使用正则表达式

时间:2017-07-20 18:55:49

标签: python regex

我从一个设备中提取了一个字符串,我必须在其中找到并使用正则表达式匹配其版本。该字符串包含软件的版本号以及其他文本。 形式为1.2.3.x.z-2

的东西

基本上它包含数字字母冒号连字符等的混合。 我在正则表达式中匹配什么。

我尝试了字符串中第一个和最后一个数字的索引,并打印了2个索引之间的所有数据。 但这不是字符串中唯一存在的数字。例如,它可能有类似日期的东西。

即使我稍后过滤其他数字,对于遵循这种模式的内容我能匹配什么?

3 个答案:

答案 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])),我不确定是否有办法阻止这种情况。