正则表达式/ R从具有版本号的路径中提取字符串

时间:2019-05-08 20:40:45

标签: r regex

我有带有这样的字符串的列:

col = c("/abc/def/hdk/database/dbclient/ibm/DB2Client-V97FP02.v01/sqllib/lib64",
        "/abc/def/hdk/database/dbclient/ibm/DB2Client-V97FP02.v01/sqllib/misc", 
        "azn/external/curl-7.52.1/linux_g44.exe",
        "store/software/ep/rpg/external/python27-2.7.1/lib")

我要提取字符串,然后是版本号。我希望结果像这样:

result = c("DB2Client-V97FP02.v01","DB2Client-V97FP02.v01", "curl-7.52.1", "python27-2.7.1")

我能够使用正则表达式仅提取遵循标准版本"\\d+(\\.\\d+)"的编号,但是不知道如何解决此问题。

谢谢

2 个答案:

答案 0 :(得分:1)

我建议匹配所有非/字符,然后是连字符,然后是一组可选的1+个单词字符,后跟.v,然后是1+个数字,后跟1个或多个重复的{{ 1}}和1个以上的数字:

.

请参见regex demoregex graph

enter image description here

R demo

regmatches(col, regexpr("[^/]+-(?:\\w+\\.v)?\\d+(?:\\.\\d+)*", col, perl=TRUE))

答案 1 :(得分:0)

根据您的示例,我建议使用/\d([\d\.\-]*\d)?/。这将与其中任何一个的版本号匹配。如果要允许第二个\d和第三个\w进行字母数字值设置,也可以将其更改为{{1}}。