У меня есть строка в формате запроса URL:Извлечение параметров имен в URL запроса
string <- "key1=value1&key2=value2"
И я хотел бы, чтобы извлечь все имена параметров (key1
, key2
).
Я думал о strsplit
с разделом, соответствующим всем между =
и опционным &
.
unlist(strsplit(string, "=.+&?"))
[1] "key1"
Но я думаю, что этот шаблон совпадает с первой =
до конца строки, включая в .+
моей опциональной &
. Я подозреваю, что это из-за «жадности» регулярного выражения, поэтому я попытался сделать ленивый, но у меня получился странный результат.
> unlist(strsplit(string, "=.+?&?"))
[1] "key1" "alue1&key2" "alue2"
Теперь я действительно не понимаю, что происходит здесь, и я не знаю, как я могу сделать его ленивым, когда последний совпадающий символ не является обязательным.
Я знаю (и, я думаю, я также понимаю, почему), что он работает, если я исключаю &
из .+
, но мне хотелось бы понять, почему regexp выше не работает.
> unlist(strsplit(string, "=[^&]+&?"))
[1] "key1" "key2"
Мой фактический вариант, чтобы сделать это в 2 раза с:
unlist(sapply(unlist(strsplit(string, "&")), strsplit, split = "=.*", USE.NAMES = FALSE))
Что я делаю неправильно, чтобы добиться этого в одном регулярном выражении? Спасибо за любую помощь.
Я мучительно участвую в регулярном выражении, поэтому любые другие варианты также будут оценены для моих знаний!
Сплите аргумент должен описывать разделитель, а не формат частей, которые вы хотите получить. – Aaron
Если вы хотите извлечь параметры URL-адреса, вы можете посмотреть пакет 'urltools'. Он может иметь то, что вам нужно. Если ваша цель состоит в том, чтобы учиться регулярному выражению, во что бы то ни стало, продолжайте учиться – GGamba
Релевантный/Возможный дублированный http://stackoverflow.com/questions/4350440/split-a-column-of-a-data-frame-to-multiple- столбцы – zx8754