Regex / R для извлечения строки из пути с номером версии - PullRequest
0 голосов
/ 08 мая 2019

У меня есть столбцы с такими строками:

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+)", но я не знаю, как решить эту проблему.

Спасибо

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Я предлагаю сопоставить все не-/ символы, затем дефис, затем необязательную группу из 1+ слов, за которыми следуют .v, а затем 1+ цифр, за которыми следуют 1 или более повторений . и 1+ цифры:

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

См. Демонстрацию регулярных выражений и график регулярных выражений :

* +1012 *enter image description here

Демоверсия 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" 
0 голосов
/ 09 мая 2019

На основании ваших примеров я бы предложил /\d([\d\.\-]*\d)?/. Это будет соответствовать номеру версии любого из них. Вы также можете изменить второй и третий значения \d на \w, если хотите разрешить ввод буквенно-цифровых значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...