我有带有这样的字符串的列:
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+)"
的编号,但是不知道如何解决此问题。
谢谢
答案 0 :(得分:1)
我建议匹配所有非/
字符,然后是连字符,然后是一组可选的1+个单词字符,后跟.v
,然后是1+个数字,后跟1个或多个重复的{{ 1}}和1个以上的数字:
.
regmatches(col, regexpr("[^/]+-(?:\\w+\\.v)?\\d+(?:\\.\\d+)*", col, perl=TRUE))
答案 1 :(得分:0)
根据您的示例,我建议使用/\d([\d\.\-]*\d)?/
。这将与其中任何一个的版本号匹配。如果要允许第二个\d
和第三个\w
进行字母数字值设置,也可以将其更改为{{1}}。