簡體   English   中英

需要幫助找出正確的正則表達式模式

[英]Need help in figuring out the right regex pattern

我需要從字符串中提取子字符串:

給定字符串: "< If( ( h == v ) ): { [ < j = (i - f) ;>, < k = (g + t) ;> ] }>"我需要兩個子字符串: "j = (i - f)""k = (g + t)"

為此,我嘗試了用戶模式正則表達式。 這是我的代碼:

Pattern pattern = Pattern.compile("[<*;>]");
Matcher matcher = pattern.matcher(out.get(i).toString());
while (matcher.find())
     {
        B2.add(matcher.group());
      }

out.get(i).toString()是我的輸入字符串。 B2是一個ArrayList,它將包含兩個提取的子字符串。

但是,運行上面的代碼后,我得到的輸出是: [<, <, ;, >, <, ;, >, >]

我的模式不起作用! 非常感激你的幫助。 提前致謝!

您可以使用表達式<([^<]+);>

這將匹配<和;>之間的內容

Pattern pattern = Pattern.compile("<([^<]+);>");
Matcher matcher = pattern.matcher(out.get(i).toString());
while (matcher.find())
     {
        B2.add(matcher.group(1));
      }

您可以在regexplanet上查看結果: http ://fiddle.re/5rty6

您的[]會給您帶來麻煩。 這些符號的含義是: "match one among the symbols inside of these"如果刪除這些"match one among the symbols inside of these" ,將會得到更好的結果。 這樣做時,您還必須避開尖括號。

下一步將是捕獲組。 您通常使用()

您還必須擔心令人討厭的工件,例如字符串開頭的< ,它將與您的正則表達式混淆。 為了解決這個問題,您需要將它們從正則表達式中排除。

你可能最終會

"\<([^<>]*?)\>"

作為您的正則表達式。 確保檢查特定的Java文檔並轉義\\以獲取最終結果

"\\<([^<>]*?)\\>"

如果您想在尖括號內使用其他<> ,則regex在這種情況下會遇到很多麻煩,也許您應該嘗試其他方法

這是示例正則表達式

暫無
暫無

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

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