有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java替换除指定的正则表达式之外的所有正则表达式

我已经有很长一段时间不知道该怎么办了。我有一段代码:

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

基本上,我需要它以相反的方式工作——替换除指定正则表达式之外的所有内容。我一直试图用消极的前瞻来做这件事,但没有任何效果


共 (3) 个答案

  1. # 1 楼答案

    我还认为,去掉你不想要的东西是一种双重否定。专注于你正在寻找的东西,并为此使用模式匹配。此示例在文档中搜索任何名称属性:

    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"
    
  2. # 2 楼答案

    我想是为了你的特殊任务

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

    你应该做你需要的

  3. # 3 楼答案

    您希望删除与模式不匹配的所有内容。这与简单地过滤模式匹配相同。使用正则表达式查找该模式的匹配项,然后在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();