【问题标题】:How to use Pattern, Matcher in Java regex API to remove a specific line如何在 Java regex API 中使用 Pattern、Matcher 删除特定行
【发布时间】:2021-02-01 17:40:47
【问题描述】:

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

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

输入:

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

输出:

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

(所有字符串为字符,无空格,无 cmets)

【问题讨论】:

    标签: java string qregularexpression


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

    【讨论】:

    • 我没有正确描述它,评论是一个占位符,它可以是任何字符串
    • 非常感谢,我今天学到了很多关于正则表达式的知识,祝你晚上愉快,晚安,Arvind
    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 2012-11-25
    • 2011-09-24
    相关资源
    最近更新 更多