1

我最近问了一个类似的问题:将表达式发送到网站返回动态结果(图片)并得到了很好的响应,不需要将表达式发送到网页的字段,而是利用 URL 来完成工作。

我发现了一个更好的正则表达式可视化器(由 G. Grothendieck 指出),因为它可以设置为基于 Python(更接近 R;例如,它允许像http://www.regexper.com/(?<=foo)那样的lookbehinds引发错误) .

使用此正则表达式:"(?<=foo)\\s*foo[A-Z]\\d{2,3}"我想使用 R 发送(?<=foo)\s*foo[A-Z]\d{2,3},将下拉菜单设置为Python,然后打开或返回可视化结果,如下所示:

在此处输入图像描述

相同的 URL 技巧在这里不起作用,因为输入表达式时 URL 不会改变,而是嵌入的 JavaScript 正在返回结果。

MWE

## Expression
x <- "(?<=foo)\\s*foo[A-Z]\\d{2,3}"
4

1 回答 1

5

您将无法通过 URL 操作页面的 javascript 状态,因此如果您想与表单进行交互,则需要在可以与页面交互的环境(如RSelenium)中工作。但这打开了蠕虫的花药罐头。鉴于他们希望您为他们的服务付费,他们可能不太热衷于自动抓取。

据我所知,他们没有正式记录的 API,但是当您单击站点上的“共享”链接时,它会向他们的服务器提交一个 JSON 对象以获取可共享的 URL。有效载荷看起来像

{"title":"Untitled Regex",
"description":"No description",
"regex":"(?<=foo)\\s*foo[A-Z]\\d{2,3}\n",
"flavor":"python",
"strFlags":"",
"testString":"My test data",
"unitTests":"[]",
 "share":true}

因此,如果您绕过 UI 并直接发布该 JSON 内容,您可以获得可用于浏览以查看结果的唯一代码。那看起来像

payload<-list(title="Untitled Regex",
    description="No description",
    regex="(?<=foo)\\s*foo[A-Z]\\d{2,3}\n",
    flavor="python",
    strFlags="",
    testString="My test data",
    unitTests="[]",
    share=TRUE)

library(httr)
library(jsonlite)

rr <- POST("https://www.debuggex.com/api/regex", 
    body=lapply(payload, unbox), encode="json")
url <- paste0("https://www.debuggex.com/r/", content(rr)$token)
browseURL(url)

这是一个非常脆弱的解决方案,因为他们可能随时选择更改其实现。最好使用他们官方支持的功能。

于 2014-12-19T21:26:03.823 回答