如何在 Java 正则表达式 API 中使用 Pattern、Matcher 来删除特定行

How to use Pattern, Matcher in Java regex API to remove a specific line

我有一个复杂的字符串拆分,我需要删除 commentsspaces,并保留所有numbers 但将所有 string 更改为 character。如果 - 符号在开头且后跟数字,则将其视为负数而不是运算符

评论的样式为?<space>comments<space>?(评论为占位符)

输入:

-122+2 ? comments ?sa b
-122+2 ? blabla ?sa b

输出:

 ["-122","+","2","?","s","a","b"]  

(所有字符串都变成字符,没有space,没有注释)

  1. 将不需要的字符串 \s*\?\s*\w+\s*(?=\?) 替换为 ""。您可以链接 String#replaceAll 以删除任何剩余的空格。请注意,?= 表示 positive lookahead,此处表示 \s*\?\s*\w+\s* 后跟 ?。我希望您已经知道 \s 指定空格,\w 指定单词字符。
  2. 然后你可以使用正则表达式,^-\d+|\d+|\D这意味着开头的负整数(即^-\d+)或数字(即\d+)或non-digit (\D).

演示:

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

public class Main {
    public static void main(String[] args) {
        String str = "-122+2 ? comments ?sa b";
        str = str.replaceAll("\s*\?\s*\w+\s*(?=\?)", "").replaceAll("\s+", "");

        Pattern pattern = Pattern.compile("^-\d+|\d+|\D");
        Matcher matcher = pattern.matcher(str);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

输出:

-122
+
2
?
s
a
b