2016-05-03 6 views
0

Ich habe eine Suche String, der das Format unten enthält:RegexMuster für String mit mehreren vorderen und hinteren Einsen und Nullen

Search String

111651311 
    111651303 
    4111650024 
    4360280062 
    20167400 

Es muss mit Zahlenfolge gelegt werden, unter

001111651311000 
001111651303000 
054111650024000 
054360280062000 
201674000000000 

Bitte beachten Sie, dass die Suchzeichenfolgen mit zusätzlichen Nummern auf jeder Seite hinzugefügt wurden. Ich habe versucht, die Regex unten in Java, um die Suchzeichenfolgen übereinzustimmen, aber es funktioniert nur für einige.

Pattern pattern = Pattern.compile("([0-9])\1*"+c4MIDVal+"([0-9])\1*"); 

Irgendwelche Ratschläge?

aktualisieren

hinzugefügt der Code, den ich unten verwendet könnte etwas Klarheit darüber geben, was ich versuche,

Code Snippet

public void compare(String fileNameAdded, String fileNameToBeAdded){ 

     List<String> midListAdded = readMID.readMIDAdded(fileNameAdded); 

     HashMap<String, String> midPairsToBeAdded = readMID.readMIDToBeAdded(fileNameToBeAdded); 
     List <String []> midCaptured = new ArrayList<String[]>(); 


     for (Map.Entry<String, String> entry: midPairsToBeAdded.entrySet()){ 

      String c4StoreKey = entry.getKey(); 
      String c4MIDVal = entry.getValue(); 

      Pattern pattern = Pattern.compile("([0-9]?)\\1*"+c4MIDVal+"([0-9]?)\\2*"); 

      for (String mid : midListAdded){ 

       Matcher match = pattern.matcher(mid); 
//    logger.info("Match Configured MID :: "+ mid+ " with Pattern "+"\\*"+match.toString()+"\\*"); 

       if (match.find()){ 

        midCaptured.add(new String []{ c4StoreKey +"-"+c4MIDVal, mid}); 

       } 
      } 
     } 

     logger.info(midCaptured.size()+ " List of Configured MIDs "); 
     for (String [] entry: midCaptured){ 

      logger.info(entry[0]+ "- "+entry[1] ); 
     } 
    } 
+2

Wäre 'indexOf' nicht ausreichend? – Berger

+0

oder 'enthält'. KUSS. – NickJ

+0

Ich habe meinen Code eingefügt bitte überprüfen – dimas

Antwort

2

Sie müssen beziehen sich die zweite Erfassungsgruppe im zweiten Teil zu tun Außerdem müssen Sie beide Muster innerhalb der Erfassungsgruppe als optional definieren.

Pattern pattern = Pattern.compile("([0-9]?)\\1*"+c4MIDVal+"([0-9]?)\\2*"); 

DEMO

+0

Auch der dynamische Teil sollte zitiert werden: 'Pattern.quote (c4MIDVal)'. Wahrscheinlich nicht nötig, da es nur Zahlen sind, aber immer noch eine gute Idee. – Andreas

+0

Hallo Avinash, danke für die Antwort. habe deinen Vorschlag ausprobiert, habe aber trotzdem die Anzahl der Ergebnisse. Es kann übereinstimmen, aber nicht diese Sequenz 054111650024000. – dimas

+0

@dimas was ist der c4MIDVal Wert? –

0

Was ist das Problem durch die String.contains() Methode?

"001111651311000".contains("111651311"); // true 
"201674000000000".contains("111651311"); // false 
+0

es gibt die übereinstimmende Zeichenfolge nicht zurück. –

+0

@AvinashRaj Es ist die Zeichenfolge, die Sie vergleichen? –

Verwandte Themen