2014-12-19 2 views
1

Недавно я задал аналогичный вопрос: Send expression to website return dynamic result (picture) и получил ответ, который не требовал отправки выражения в поле веб-страницы, вместо этого он использовал URL-адрес, чтобы получить Работа выполнена.Отправлять выражение в поле поля сайта, возвращать динамический результат (картинка)

Я обнаружил better regex visualizer (указал Г. Гротендиком), как он может быть установлен на основе 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 и открытым или вернуть визуальные результаты, как показано здесь:

enter image description here

То же Трюк URL не будет работать здесь, поскольку URL-адрес не изменяется при вводе выражения, а встроенный JavaScript возвращает результаты.

MWE

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

Хотя вы не получили «полного ответа» с помощью png-моментального снимка, я нашел частичный ответ очень полезным. –

+1

есть также хороший [на основе текста] (http://rick.measham.id.au/paste/explain.pl?regex=%28%3F <% 3Dfoo% 29% 5Cs * foo% 5BA-Z% 5D% 5Cd% 7B2% 2C3% 7D) объясните, что было бы неплохо, если бы вы хотели напечатать пояснения на консоли – rawr

+0

@BondedDust согласился. Держитесь за проверку, чтобы дать время для дополнительного мышления. –

ответ

5

Вы не сможете управлять яваскрипт состоянием страницы с помощью URL-адреса, так что вы должны будете работать в среде, которая может взаимодействовать с страницей в интерактивном режиме, как 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} 

Так что, если вы обходите интерфейс и непосредственно размещать этот контент в формате 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) 

Это очень хрупкое решение, потому что они могут выбрать, чтобы изменить их выполнение в любое время. Лучше использовать функции, которые они официально поддерживают.

+0

Отличное обучение. Я вижу проблемы с решением, которое вы указываете, но это может быть лучшее решение. +1 –