这是我的代码,请检查。在结束时我想删除list-style-image:url(images / dot.gif);来自String
String temp = "font-family: Arial, Helvetica, sans-serif;font-size: 11px;color: F143F;list-style-image: url(images/dot.gif);list-style-type: none;";
Pattern pxPattern = Pattern.compile("([a-z]+-)+([a-z]+):(\\s)url\\(.*?\\);");
Matcher pxMatcher = pxPattern.matcher(temp);
while(pxMatcher.find()) {
System.out.println(pxMatcher.group());
String urlString =pxMatcher.group();
if(!urlString.matches("http://|https://")) {
System.out.println("Firts: "+temp.trim());
System.out.println(urlString);
System.out.println(temp.replaceAll(urlString, ""));
//System.out.println("Remove: "+temp);
}
}
答案 0 :(得分:2)
这是问题标题的一般答案;它可能无法直接解决问题的具体细节。假设我们有一个名为PATTERN的字符串和一个名为body的字符串。然后我们可以从body中删除PATTERN的所有匹配项,如下所示:
StringBuilder builder = new StringBuilder();
int x = 0;
Matcher m = Pattern.compile(PATTERN).matcher(body);
while (m.find()) {
builder.append(body.substring(x, m.start()));
x = m.end();
}
return(builder.toString());
E.g。如果PATTERN =“XOX”和body =“Hello XOXWorldXOX”那么我们应该回到“Hello World”。
工作原理:遍历每个匹配,在最后一次匹配之后在字符串中记录索引,并将该索引中的子字符串添加到当前匹配的开头到字符串构建器,然后将索引向前跳过目前的比赛结束。最后,构建字符串。
注意: beny23的答案更适合从字符串中删除正则表达式。但是,通过小调整,上面的代码可以更加通用。可以更改它以使用唯一替换字符串替换每个后续出现的正则表达式。这比replaceAll更强大和更通用,但它是一个奇怪的角落情况,可能不经常出现。不过,为了向您展示我的意思,假设我们不是删除每个正则表达式匹配,而是将第一个匹配替换为“match_1”,将第二个匹配替换为“match_2”,依此类推,我们可以这样做:
StringBuilder builder = new StringBuilder();
int x = 0;
int matchNumber = 1;
Matcher m = Pattern.compile(PATTERN).matcher(body);
while (m.find()) {
builder.append(body.substring(x, m.start()));
builder.append("match_" + matchNumber);
x = m.end();
}
return(builder.toString());
E.g。如果PATTERN =“XOX”和body =“Hello XOXWorldXOX”那么我们应该回到“Hello match_1Worldmatch_2”。
稍微调整一下,我们可以概括上面的内容,用数组元素替换每个后续匹配,使其真正通用。
答案 1 :(得分:1)
它对我很有用
while(pxMatcher.find()) {
System.out.println(pxMatcher.group());
String urlString =pxMatcher.group();
if(!urlString.matches("http://|https://")) {
System.out.println("Firts: "+temp.trim());
System.out.println(urlString);
temp = temp.replace(urlString, "");
System.out.println("Remove: "+temp);
}
}
结果是
list-style-image: url(images/dot.gif);
Firts: font-family: Arial, Helvetica, sans-serif;font-size: 11px;color: F143F;list-style-image: url(images/dot.gif);list-style-type: none;
list-style-image: url(images/dot.gif);
Remove: font-family: Arial, Helvetica, sans-serif;font-size: 11px;color: F143F;list-style-type: none;
答案 2 :(得分:1)
我会删除list-style-image
,如下所示(而不是使用while循环,这可以在一行中完成):
temp.replaceAll("list-style-image:[^;]+;?", "");
解释:
list-style-image
,这将从字符串的中间和末尾删除list-style-image
属性。
结果:
font-family: Arial, Helvetica, sans-serif;font-size: 11px;color: F143F;list-style-type: none;