繁体   English   中英

Java replace除了指定的正则表达式

[英]Java replaceAll but the specified regex

已经有相当长的一段时间我无法解决这个问题。 我有这段代码:

getStringFromDom(doc).replaceAll("contract=\"\\d*\"|name=\"\\p{L}*\"", "");

基本上,我需要它按相反的方式工作-替换所有内容,但替换指定的正则表达式。 我一直在尝试以负面的前瞻无济于事。

我认为对于您的特定任务

getStringFromDom(doc).replaceAll(".*?(contract=\"\\d*\"|name=\"\\p{L}*\").*", "$1");

应该做你需要的。

您要删除所有与模式不匹配的内容。 这与仅过滤模式匹配项相同。 使用正则表达式查找该模式的匹配项,然后在stringbuilder中收集匹配项。

Matcher m = Pattern.compile(your pattern).matcher(your input);
StringBuilder sb = new StringBuilder();
while (m.find()) sb.append (m.group()).append('\n');
String result = sb.toString();

我也认为删除您不想要的东西是双重否定的。 专注于您要寻找的内容,并为此使用模式匹配。 本示例在您的文档中搜索任何名称属性:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) {
        String input = "<AnotherDoc accNum=\"1111\" docDate=\"2017-09-26\" docNum=\"2222\" name=\"foo\"> <anotherTag>some date</anotherTag>";

        Pattern pattern = Pattern.compile("name=\"[^\\\"]*\""); // value are all characters but "
        Matcher matcher = pattern.matcher(input);

        while (matcher.find())
            System.out.println(matcher.group());
    }
}

打印:

name="foo"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM