regex 正则表达式查找除模式之外的所有内容

6gpjuf90  于 2023-03-31  发布在  其他
关注(0)|答案(4)|浏览(173)

我对正则表达式很陌生,正在寻找一个匹配任何东西的正则表达式,除了所有匹配给定正则表达式的正则表达式。我已经找到了找到除了特定字符串之外的任何东西的方法,但我需要它不匹配正则表达式。而且它必须在Java中工作。
背景:我正在使用Ansi颜色字符串。我想取一个字符串,其中包含一些可能使用Ansi颜色代码进行格式化的文本,并删除除这些颜色代码之外的任何内容。这应该会为字符串上附加的任何字符给予当前的颜色格式。
格式化的字符串可能如下所示:

Hello \u001b[31;44mWorld\u001b[0m!

它将显示为Hello World!,其中世界将在蓝色背景上显示为红色。
我用来查找代码的正则表达式是

\u001b\[\d+(;\d+)*m

现在我想要一个正则表达式,它匹配除了颜色代码之外的所有内容,所以它匹配

您好\u001b[31;44 m世界\u001b[0 m**!**

q9yhzks0

q9yhzks01#

上下文中的正则表达式:

public static void main(String[] args) {
    String input = "Hello \u001b[31;44mWorld\u001b[0m!";
    String result = Pattern.compile("\u001b\\[\\d+(;\\d+)*m").matcher(input).replaceAll("");
    System.out.println("Output: '" + result + "'");
}

输出:

Output: 'Hello World!'
bnl4lu3b

bnl4lu3b2#

Regex并不是真的要给予“除了”正则表达式匹配的所有内容。但是,通常最简单的方法是匹配你想要的内容(比如你的例子中的颜色代码),然后获取你拥有的字符串,并删除你找到的匹配,这将留下“除了”匹配的所有内容。
快速样本(未经测试)

String everythingBut = "string that has regex matches".replaceAll("r[eg]+x ", "");

结果应该是string that has matches,即正则表达式的逆

t3irkdon

t3irkdon3#

String text="Hello \u001b[31;44mWorld\u001b[0m!";
Arrays.asList( text.split("\\[([;0-9]+)m"))
.stream()
.forEach(s -> aa.replaceAll(s,""));

输出:

[31;44m[0m
hfsqlsce

hfsqlsce4#

你可以这样做,它只是找到所有的匹配项,并把它们放在一个数组中,如果需要的话,这个数组可以连接到一个字符串。

String pat = "\u001b\\[\\d+(;\\d+)*m";
String html = "Hello \u001b[31;44mWorld\u001b[0m!";

Matcher m = Pattern.compile(pat).matcher(html);
String[] s =  m.results().map(mr->mr.group()).toArray(String[]::new);

相关问题