当前位置: 首页 > 知识库问答 >
问题:

如何在Java正则表达式API中使用模式匹配器删除特定行

阎经武
2023-03-14

我有一个复杂的字符串分割,我需要删除注释,空格,并保留所有的数字,但改变所有字符串为字符。如果< code>-符号在开头,后面跟一个数字,则将其视为负数,而不是运算符

评论有的风格

输入:

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

输出:

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

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


共有1个答案

刘高驰
2023-03-14
  1. 将不需要的字符串 \s*\?\s*\w \s*(?=\?) 替换为 “”。您可以将 String#replaceAll 链接起来以删除任何剩余的空格。请注意,?= 表示正前瞻,此处表示 \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
 类似资料:
  • 问题内容: 我在包含一些文本的文本文件中有字符串,如下所示: 我希望在类名之前获取所有内容。 我已经尝试了以下方法,但是我不知道该如何摆脱 我得到以下信息: 而不是我想要的: 关于如何解决此问题的任何指示? 问题答案: 如果不使用捕获组,则可以使用超前(业务)。 应该捕获您想要的一切。这里是细分的:

  • 问题内容: 这个正则表达式模式: 产生以下结果: 如何删除“ cID =“? 谢谢 问题答案: 您可以使用lookbehind(不在Javascript中): 或者,您可以使用分组并获取第一个分组:

  • 问题内容: 原始数据是: 我想匹配一条线,但是不能使用 但是,我可以使用match 。 我该如何搭配 问题答案: 默认情况下,和分别匹配输入的开始和结束。您需要使用启用多行模式,这会导致并匹配行的开始和结束: 演示: 产生以下输出: 编辑我 没有任何匹配的事实是因为默认情况下,和不匹配。如果您通过启用了DOT-ALL ,也使匹配了它们,那么您将看到整个输入字符串都被匹配了: 编辑二 在这种情况下,

  • 问题内容: 该字符串可以类似于以下之一: 我想匹配不限数量的“ a(x,y)”。如何使用Regex做到这一点?这是我所拥有的: 它仅匹配“ a(x,y)”的两个递归。 问题答案: Java的标准正则表达式库不支持递归,因此您无法将此类通用嵌套结构与之匹配。 但是在确实支持递归的版本(Perl,PCRE,.NET等)中,您可以使用以下表达式:

  • 字符串可以类似于以下内容之一: 我想匹配无限数量的“a(x,y)”。我如何使用正则表达式来实现这一点?以下是我所拥有的: 它只匹配"a(x, y)"的两个递归。

  • 我在Java中使用模式和匹配器遇到了一个问题… 我试图用它从一个至少包含.sxxexx的字符串中提取两个数字。其中XX是我要提取的int。有没有regex/java专家想帮我?