2016-08-02 21 views
0

Einige meiner Zeichenfolgen enthalten möglicherweise eine Teilzeichenfolge, die wie @[alph4Num3ric-alph4Num3ric] aussieht, wo ich die alphanumerische ID finden und durch einen entsprechenden Textwert für den zugeordneten Schlüssel ersetzen wird in einer Karte.Konvertieren Sie dieses Muster in Regex für Pattern.Matches (..)

Meine erste Neigung war, wenn mein string.contains("@[") zu überprüfen, aber ich möchte spezifischere

so jetzt sein, die ich bin auf der Suche Pattern.matches( aber bin nicht sicher, der Regex und Gesamt Ausdruck

wie würde ich für @ regex [...... - ....] in der Methode Pattern.matches müssen auch Striche berücksichtigt werden. Also ich bin mir nicht sicher, was in dieser Syntax oder Wildkatze oder mehr maskiert werden muss.

Ich bin auch nicht 100% sicher, ob dies die beste Nachricht ist. Ich möchte zuerst einen booleschen Wert von Pattern.matches erhalten und dann den tatsächlichen Wert erhalten und die Zeichenfolge mit diesen Werten ändern, was gut genug erscheint, aber ich möchte die Berechnungen minimieren.

+3

Klingt wie ein Plan. Kannst du bitte deine Versuche teilen? –

+0

Wow, fast 10K Ruf; und noch posten Sie eine Frage, die nur Anforderungen gibt; ohne einen Code zu zeigen ... – GhostCat

+0

@ WiktorStribiżew Was denkst du über den Ansatz? – CQM

Antwort

1

Plese dies versuchen,

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Test { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     String expression = "String contains @[alph4Num3ric-alph4Num3ric] as substring"; 

     Pattern pattern = Pattern 
       .compile("\\@\\[([a-zA-Z0-9]+)-([a-zA-Z0-9]+)\\]"); 
     Matcher matcher = pattern.matcher(expression); 
     while (matcher.find()) { 
      System.out.println("matched: "+matcher.group()); 
      System.out.println("group1: "+matcher.group(1)); 
      System.out.println("group2: "+matcher.group(2)); 
      System.out 
        .println("after replace "+expression.replace(matcher.group(1), "customkey")); 
     } 
    } 

} 

Ausgang:

matched: @[alph4Num3ric-alph4Num3ric] 
group1: alph4Num3ric 
group2: alph4Num3ric 
after replace: String contains @[customkey-customkey] as substring 
+1

Warum entkommst du '@'? –

+0

beide Möglichkeiten es funktioniert, können Sie entkommen, bevor @, in der Regel nehme ich keine Chancen für Sonderzeichen :) – Aditya

+0

Es kann mehrere Bindestriche sein, so gibt es eine Möglichkeit, die ich nur für die Existenz von nur @ [.. ...]? In einigen Regex-Prozessoren verwende ich \ w +, aber ich glaube, das scheitert an der Vielfalt der Zeichen. Ich werde auch @ [] ersetzen – CQM

1

Versuchen Sie dies mit:

/@[(a-zA-Z0-9-)+]/ 

ich es versuchen nicht gegeben haben, hoffen aber dies helfen würde. Auch wenn es einen Fehler zurückgibt, dann füge einen umgekehrten Schrägstrich zwischen 9 und - z./@ [(A-zA-Z0-9 -) +]/

+0

Es kann mehrere Bindestriche geben, also gibt es einen Weg, den ich nur für die Existenz von nur @ .....]?In einigen Regex-Prozessoren verwende ich '\ w +', aber ich glaube, das scheitert an der Vielfalt der Zeichen zu – CQM

+0

Kann wie folgt sein/@ [(a-zA-Z0-9 -) +]/ auch wenn es zurückgibt ein Fehler dann einen umgekehrten Schrägstrich zwischen 9 und - z/@ [(a-zA-Z0-9 \ -) ​​+]/ –

+0

Dies ist keine Antwort, es ist ein Kommentar. –