在 Html 中查找一个字符串并获取之后的值
Find a string in Html and get value after
我正在 post 访问一个网页,在我的回复中我得到了一大块 HTML 将更改下一个请求。
使用 groovy 我想找到这个字符串:
var WPQ1FormCtx = {"ListData":{"owshiddenversion":23,
下次我 post 到网页时值“23”会改变,我需要那个值。
使用 .contains
我将查找字符串是否存在。
def htmlParse = Jsoup.parse(htmlResponse)
log.info a.contains('var WPQ1FormCtx = {"ListData":{"owshiddenversion":23,')
但是我需要在字符串'var WPQ1FormCtx = {"ListData":{"owshiddenversion":xxxxx,
中写出owshiddenversion
后面的值
可以是 1 到 100 000 之间的任何值。
(希望我不会吸引太多反对票...)
我从来没有用过 Java,但是玩 here 我可以想出一个使用正则表达式的例子:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HelloWorld{
public static void main(String []args){
String str = new String("before the number 234123");
Pattern pattern = Pattern.compile("before the number (\d{1,6})");
Matcher matcher = pattern.matcher(str);
matcher.matches();
System.out.println(matcher.group(1));
}
}
如果你真的让这个数字小于或等于 100000,那么你必须编写一个稍微复杂的正则表达式,它应该是 "either 100000 or a 5 digit number".
如果我正确理解了您正在匹配的字符串,这将帮助您以纯 Groovy 的方式进行匹配。您可以将它包装在一个称为测试而不是 .contains()
的方法中
def stringPortion = 'var WPQ1FormCtx = {"ListData":{"owshiddenversion":23,'
def match = stringPortion =~ /"owshiddenversion":(\d{1,6})/ //capture the match with ()
def matchPortion = match[0][1] //first capture in match
if (matchPortion) {
println matchPortion
def number = matchPortion.toInteger()
if (number > 100000) {
println 'number > 100000'
}
else if (number <= 10000) {
println 'number <= 10000'
}
}
下面的代码块可以工作
def json = WPQ1FormCtx
def parsedJson = new groovy.json.JsonSlurper().parseText(json)
def owshiddenversion= parsedJson.findIndexOf { it.key == 'owshiddenversion' }
我正在 post 访问一个网页,在我的回复中我得到了一大块 HTML 将更改下一个请求。 使用 groovy 我想找到这个字符串:
var WPQ1FormCtx = {"ListData":{"owshiddenversion":23,
下次我 post 到网页时值“23”会改变,我需要那个值。
使用 .contains
我将查找字符串是否存在。
def htmlParse = Jsoup.parse(htmlResponse)
log.info a.contains('var WPQ1FormCtx = {"ListData":{"owshiddenversion":23,')
但是我需要在字符串'var WPQ1FormCtx = {"ListData":{"owshiddenversion":xxxxx,
中写出owshiddenversion
后面的值
可以是 1 到 100 000 之间的任何值。
(希望我不会吸引太多反对票...)
我从来没有用过 Java,但是玩 here 我可以想出一个使用正则表达式的例子:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HelloWorld{
public static void main(String []args){
String str = new String("before the number 234123");
Pattern pattern = Pattern.compile("before the number (\d{1,6})");
Matcher matcher = pattern.matcher(str);
matcher.matches();
System.out.println(matcher.group(1));
}
}
如果你真的让这个数字小于或等于 100000,那么你必须编写一个稍微复杂的正则表达式,它应该是 "either 100000 or a 5 digit number".
如果我正确理解了您正在匹配的字符串,这将帮助您以纯 Groovy 的方式进行匹配。您可以将它包装在一个称为测试而不是 .contains()
的方法中def stringPortion = 'var WPQ1FormCtx = {"ListData":{"owshiddenversion":23,'
def match = stringPortion =~ /"owshiddenversion":(\d{1,6})/ //capture the match with ()
def matchPortion = match[0][1] //first capture in match
if (matchPortion) {
println matchPortion
def number = matchPortion.toInteger()
if (number > 100000) {
println 'number > 100000'
}
else if (number <= 10000) {
println 'number <= 10000'
}
}
下面的代码块可以工作
def json = WPQ1FormCtx
def parsedJson = new groovy.json.JsonSlurper().parseText(json)
def owshiddenversion= parsedJson.findIndexOf { it.key == 'owshiddenversion' }