繁体   English   中英

R中的regexpr语法

[英]regexpr syntax in R

我正在尝试以下哪些应该允许我获取productUrl://和以下内容之间的所有内容?

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

以上工作在https://regexr.com/

然后我试图逃避反斜杠以使该字符串适合grep函数,但没有运气。 这样做的正确方法是什么?

请参阅此示例: 链接到示例

我实际上需要提取与我的模式匹配的子串,因此grep可以与另一个函数一起使用。

请注意,您不需要转义/使用R正则表达式模式,因为它们是使用字符串文字定义的,并且/不是特殊的正则表达式元字符。 如果你想写一个" inside "..."字符串文字,你应该用一个\\来逃避它,就像你已经在做的那样。

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

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

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

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

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

您也可以使用\\K来省略匹配的文本部分,而不是lookbehind:

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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM