我正在尝试在给定单词之后提取单词。
例如:如果我的字符串是“ http://localhost:8080/api/rest/loan/application/1007/applicant/951/pan”,那么我想提取application
之后的单词(假设应用程序在字符串中仅出现一次)。
在这种情况下,我想提取1007。到目前为止,我已经使用Java尝试过此操作
(.*?^)(.*?)application/[0-9]*
。
这使我的输出为http://localhost:8080/api/rest/loan/application/1007
。但是我只想输出1007。
答案 0 :(得分:2)
您可以使用正则表达式来确保使用此正则表达式在匹配的文本之前加上application/
(?<=application/)[^/]+
在这里,[^/]+
部分将捕获/
以外的任何文本,从而为您提供所需的文本1007
Java代码
String s = "http://localhost:8080/api/rest/loan/application/1007/applicant/951/pan";
Pattern p = Pattern.compile("(?<=application/)[^/]+");
Matcher m = p.matcher(s);
if (m.find()) {
System.out.println(m.group());
}
打印
1007
执行相同任务的另一种更简便,更高效的方法是使用以下分组模式,
/application/([^/]+)
并捕获组1的内容。
Regex Demo with grouping pattern
请注意,由于某些方言有时不支持环顾四周,因此这样做的速度更快,并且可以广泛使用。
Java代码
String s = "http://localhost:8080/api/rest/loan/application/1007/applicant/951/pan";
Pattern p = Pattern.compile("/application/([^/]+)");
Matcher m = p.matcher(s);
if (m.find()) {
System.out.println(m.group(1));
}
打印
1007
答案 1 :(得分:0)
怎么样
String a = "http://localhost:8080/api/rest/loan/application/1007/applicant/951/pan";
a = a.replaceAll("(.*?^)(.*?)application/", "");
String[] b = a.split("/");
System.out.println(b[0]);
字符串replace
函数将精确的字符串作为输入,而replaceAll
函数将正则表达式作为输入参数。