gpt4 book ai didi

R 中的 regexpr 语法

转载 作者:行者123 更新时间:2023-12-02 08:24:12 25 4
gpt4 key购买 nike

我正在尝试以下操作,这应该允许我获得 productUrl:// 之间的所有内容以及以下?

(?<=\"productUrl\"\:\"\/\/)(.*?)(?=\?)

以上适用于 https://regexr.com/

然后我尝试转义反斜杠以将该字符串放入 grep 中功能但没有运气。正确的做法是什么?

请参阅此示例:link to example

我实际上需要提取与我的模式匹配的子字符串,所以 grep可以与其他功能结合使用。

最佳答案

请注意,您不需要在 R 正则表达式模式中转义 /,因为它们是使用字符串文字定义的,并且 / 不是特殊的正则表达式元字符。如果您想在 "..." 字符串文字中写入 " ,您应该使用单个 \ 对其进行转义,因为您已经正在做。

如果您使用单引号来定义字符串文字并将 .*?(?=\?) 转换为否定字符类,则可以避免此处的过度转义:

grep('(?<="productUrl":"//)([^?]*)', x, perl=TRUE)

[^?]* 否定字符类匹配除 ? 之外的任意 0 个或多个字符。

如果您要检查的字符串没有双引号,请将它们从lookbehind中删除:

grep('(?<=productUrl://)([^?]*)', x, perl=TRUE)

除了lookbehind,您还可以使用\K来省略匹配的文本部分:

grep('productUrl://\\K[^?]*', x, perl=TRUE)
^^^

实际上,您的模式中甚至不需要捕获组。

解决实际任务

您无法在 R 中使用 grep 提取子字符串,只能使用 grep 查找/识别要从字符向量中获取的元素。要提取子字符串,您需要使用基本 R regmatches 或 stringr str_extract/str_extract_all 或类似的 match 函数。

以 R 为基数的示例:

> x <- '":"ppath","value":[],"hidden":false,"locked":false}],"bizData":"","pos":0},"listItems":[{"name":"BRAND\'S® Lutein Essence 6 Bottles x 60ml","nid":"66765568","icons":[{"domClass":"lazMall","text":"LazMall","alias":"LazMallAlias","type":"img","group":"1","showType":"0","order":0}],\n"productUrl":"//www.lazada.sg/products/brands-lutein-essence-6-bottles-x-60ml-i138897006-s167303363.html?search=1","image":"https://sg-test-11.slatic.net/p/5337f879236ece2f14158c055adcdef7.jpg",\n"productUrl":"//www.lazada.sg/products/brands-lutein-essence-6-bottles-x-60ml-i138897006-s167303363.html?search=1","sku":"BR924HBAB3R0N4SGAMZ","skuId":"167303363"}],"restrictedAge":0,"categories":[1438,1565,4776,7305'
> regmatches(x, gregexpr('"productUrl":"\\K[^?"]*', x, perl=TRUE))
[[1]]
[1] "//www.lazada.sg/products/brands-lutein-essence-6-bottles-x-60ml-i138897006-s167303363.html"
[2] "//www.lazada.sg/products/brands-lutein-essence-6-bottles-x-60ml-i138897006-s167303363.html"

使用stringr:

> library(stringr)
> str_extract_all(x, '(?<="productUrl":")[^?"]*')
[[1]]
[1] "//www.lazada.sg/products/brands-lutein-essence-6-bottles-x-60ml-i138897006-s167303363.html"
[2] "//www.lazada.sg/products/brands-lutein-essence-6-bottles-x-60ml-i138897006-s167303363.html"

关于R 中的 regexpr 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54070796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com