簡體   English   中英

正則表達式查找除模式之外的所有內容

[英]Regular expression to find everything except a pattern

我對正則表達式很陌生,我正在尋找一個匹配任何東西的正則表達式,除了匹配給定正則表達式的所有內容。 我找到了找到除特定字符串以外的任何內容的方法,但我需要它不匹配正則表達式。 它也必須在 Java 中工作。

背景:我正在使用 Ansi 色的字符串。 我想取一個字符串,其中包含一些可能用 Ansi 顏色代碼格式化的文本,並刪除除這些顏色代碼之外的任何內容。 這應該給我附加到字符串上的任何字符的當前顏色格式。

格式化的字符串可能如下所示:

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

這將顯示為Hello World! 世界將在藍色背景上顯示為紅色。

我查找代碼的正則表達式是

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

現在我想要一個匹配除顏色代碼之外的所有內容的正則表達式,所以它匹配

你好\世界\ !

正則表達式並不是真的要提供“除了”正則表達式匹配之外的所有內容。 通常執行此類操作的最簡單方法是匹配您想要的內容(例如您的案例中的顏色代碼),然后取出您擁有的字符串,並刪除您找到的匹配項,這將留下“除”之外的所有內容。

快速樣品(非常未經測試)

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

應該導致string that has matches即您的正則表達式的逆

你可以這樣做。 它只是找到所有匹配項並將它們放入一個數組中,如果需要,該數組可以連接到一個字符串。

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

輸出:

[31;44m[0m

您在上下文中的正則表達式:

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!'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM