我最近问了一个类似的问题:Send expression to website return dynamic result (picture)并得到了一个非常响应,它不需要将表达式发送到网页的字段,而是使用URL来完成工作。
我发现了一个better regex visualizer(G. Grothendieck指出)因为它可以设置为基于Python(更接近R;例如它允许像(?<=foo)
这样的后观点http://www.regexper.com/抛出错误)。
使用此正则表达式:"(?<=foo)\\s*foo[A-Z]\\d{2,3}"
我想使用R发送(?<=foo)\s*foo[A-Z]\d{2,3}
,将下拉菜单设置为Python
,然后打开或返回可视结果,如下所示:
同样的网址技巧在这里不起作用,因为在输入表达式时URL不会改变,而嵌入式JavaScript会返回结果。
MWE
## Expression
x <- "(?<=foo)\\s*foo[A-Z]\\d{2,3}"
答案 0 :(得分:5)
您无法通过网址操纵页面的javascript状态,因此您需要在可以与RSelenium交互式页面交互的环境中工作,如果您想与表单互动。但那可以开辟另一种蠕虫病毒。鉴于他们希望您为他们的服务付费,他们可能不会太热衷于自动抓取。
据我所知,他们没有正式记录的API,但当您点击&#34;分享&#34;在该站点上的链接,它向其服务器提交一个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)
这是一个非常脆弱的解决方案,因为他们可能会随时选择更改其实施。最好使用他们正式支持的功能。