r - 正则表达式/R 从具有版本号的路径中提取字符串
问题描述
我有这样的字符串列:
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")
我能够使用正则表达式仅提取标准版本之后的 bersion 编号,"\\d+(\\.\\d+)"
但不知道如何解决这个问题。
谢谢
解决方案
我建议匹配所有非/
字符,然后是连字符,然后是一组可选的 1+ 个单词字符.v
,然后是 1+ 个数字,然后是 1 个或多个重复.
和 1+ 个数字:
regmatches(col, regexpr("[^/]+-(?:\\w+\\.v)?\\d+(?:\\.\\d+)*", col, perl=TRUE))
R 演示:
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")
regmatches(col, regexpr("[^/]+-(?:\\w+\\.v)?\\d+(?:\\.\\d+)*", col, perl=TRUE))
## => [1] "DB2Client-V97FP02.v01" "DB2Client-V97FP02.v01" "curl-7.52.1" "python27-2.7.1"
推荐阅读
- maven - 如何防止 Maven 检查远程存储库中的某些工件?
- python - 如何在 python 中以 utf-8 格式写入文件名?
- c++ - 如何使用 Windows 身份验证正确连接到 SQL 服务器?
- arrays - 有效地将相同的输入映射到多个函数
- python - 将 ols 回归结果存储为字典/数据框或列表
- python - 为什么我在 Python 中收到此错误?类型错误:'在
' 需要字符串作为左操作数,而不是元组 - java - Docker 使用哪个 OpenJDK 发行版?
- android - 在哪里存储 API 访问令牌?
- java - 尝试使用 TYPES.NULL 设置 null 时获取未知对象类型
- android - 使用 MediaCodec 在 android 中压缩视频