![](/img/trans.png)
[英]Delete the content of a string between a word and special character in java
[英]Java - Extract text between special character and word
我有一個看起來像這樣的字符串
String = "Förpackning Flaska (375 ml) Förslutning Skruvkapsyl Kr/lit (104,00) Pris 39,00 kr Antal i butik 30 st Hyllplats 04-11-01 Förpackning Flaska (750 ml) Förslutning Plastkork/syntetkork Kr/lit (100,00) Pris 75,00 kr Antal i butik 16 st Hyllplats 02-03-01";
我想提取這個字符串中的一些文本。 我想要的最終結果是:
“FörpackningFlaska(375 ml)Antal i butik 30stFörpackningFlaska(750 ml)Antal i butik 16 st”。
我可以使用以下代碼:
name = name.replace(name.substring(name.indexOf(") ") + 2, name.indexOf("Antal")), "");
name = name.replace(name.substring(name.indexOf("st ") + 2, name.lastIndexOf("")), "");
這會給我這個結果:
“FörpackningFlaska(375 ml)Antal i butik 30 st”
它基本上做了我想要它做的事情,但它在第一次出現模式后停止。
我試圖使用正則表達式模式,但我不能讓它工作。 從觀察字符串開始,我得出結論,我需要一個匹配“)”和“Antal”之間所有內容的正則表達式模式。 我還需要刪除其他雜亂,但這很容易。 我的問題是,我似乎無法讓我的正則表達式工作,這可能是做這樣的事情的最佳方式。 我知道我必須逃避這個問題才能使它成為我的正則表達式中的字面字符,但我無法讓它工作。
這是我提出並嘗試的正則表達式:
Pattern p = Pattern.compile("\b\\) (.+?)\bAntal");
Matcher m = p.matcher(name);
m.find();
System.out.println(m.group(1));
歡迎任何幫助和想法!
您可能正在為java中的字符串尋找replaceAll方法。 它有以下簽名
public String replaceAll(String regex, String replacement);
顧名思義,這取代了替換文本所出現的正則表達式的所有實例。
這可以在一行中完成!
看起來你想刪除:
"st"
之后的下兩個單詞,和 ")"
和"Antal"
之間的一切 這是將執行此操作的代碼:
input.replaceAll("((?<= st)( [^ ]+){2}|(?<=\\)).*?(?= Antal))", "");
關於正則表達式的注釋:
"\\b"
。 這是一個錯誤 - 你提到了一個字面退格。 相反,您將其編碼為"\\\\b"
(A|B)
來匹配一個正則表達式 ?
在".*?"
很重要 - 這意味着非貪婪的比賽。 沒有它,它將匹配第一個支架和最后一個Antal
,跳過任何Antal
之間 這是一些測試代碼:
public static void main(String[] args) {
String input = "Förpackning Flaska (375 ml) Förslutning Skruvkapsyl Kr/lit (104,00) Pris 39,00 kr Antal i butik 30 st Hyllplats 04-11-01 Förpackning Flaska (750 ml) Förslutning Plastkork/syntetkork Kr/lit (100,00) Pris 75,00 kr Antal i butik 16 st Hyllplats 02-03-01";
String clean = input.replaceAll("((?<= st)( [^ ]+){2}|(?<=\\)).*?(?= Antal))", "");
System.out.println(clean);
}
輸出:
Förpackning Flaska (375 ml) Antal i butik 30 st Förpackning Flaska (750 ml) Antal i butik 16 st
試試這個,不確定它是否適用於所有字符串,您需要大致知道描述的最大長度。
String s = "Förpackning Flaska (375 ml) Förslutning Skruvkapsyl Kr/lit (104,00) Pris 39,00 kr Antal i butik 30 st Hyllplats 04-11-01 Förpackning Flaska (750 ml) Förslutning Plastkork/syntetkork Kr/lit (100,00) Pris 75,00 kr Antal i butik 16 st Hyllplats 02-03-01";
String out = "";
Matcher mat = Pattern.compile("(Förpackning .{0,50}\\))|(Antal.{0,50}st)").matcher(s);
while(mat.find())
out += mat.group()+" ";
System.out.println(out);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.