2016-11-24 7 views
3

Ich versuche, eine Anforderung zu erreichen.passen eingehende Zeichenfolge mit Suchzeichenfolgen

Ich empfange Dateien und jede Datei enthält einige geheime Informationen innerhalb der ersten 50 Zeichen.

Für sein Beispiel meiner Eingabedatei String

String input = "Check  this  answer and you can find the keyword with this code"; 

Dann

Lookup-Strings unten Ich habe meine geheimen Informationen übereinstimmen soll eine Suchdatei

this answer|Do this 
not answer|Do that 
example yes|Dont do 

I, das vorhanden sein könnte in den ersten 50 Zeichen mit Suchstrings. Wie in meinem Beispiel "diese Antwort" in Suchstrings mit "diese Antwort" übereinstimmen, aber Leerzeichen sind da.

Also Wert ist da, aber mit zusätzlichen Leerzeichen. Das ist kein Problem. Info ist da, das ist wichtig. Also das ist ein Spiel

Nach dem Spiel in Info werde Action-Informationen aus der Suche Zeichenfolge verwenden. Wie in diesem Beispiel wäre "Do this"

Wie kann ich diese Art von Übereinstimmungen mit Java oder Regex?

Ich habe versucht mit enthält Funktionen von Java, aber nicht bekommen bin auf der Suche nach.

Vielen Dank im Voraus für alle Anregungen

+0

Ihre Frage erwähnt Java, aber Sie haben es mit JavaScript markiert. Ich vermute, basierend auf "string", dass dies eine Java-Frage sein sollte, also habe ich es retagged. –

Antwort

0

Entfernen aus der Zeichenfolge Leerzeichen oder "\s*" zwischen den Worten in Ihren Look-up-Strings hinzufügen.

0

Ein Weg könnte sein, alle Leerzeichen in Ihren Ausdrücken durch \s+ zu ersetzen, was mindestens ein Leerzeichen bedeutet, dann erhalten Sie Ihren regulären Ausdruck.

Zum Beispiel:

String input = ... 
// Replace all spaces with \s+ an compile the resulting regular expression 
Pattern pattern = Pattern.compile("this answer".replace(" ", "\\s+")); 
Matcher matcher = pattern.matcher(input); 
// Find a match 
if (matcher.find()) { 
    // Do something 
} 
0

Ich würde so etwas tun:

String input = "Check  this  answer and you can find the keyword with this code"; 
Map<String, String> lookup = new HashMap<String, String>(); 
lookup.put(".*this\\s+answer.+", "Do this"); 
lookup.put(".*not\\s+answer.+", "Do that"); 
lookup.put(".*example\\s+yes.+", "Dont do"); 

for (String regexKey : lookup.keySet()) { 
    if (input.matches(regexKey)) { 
     System.out.println(lookup.get(regexKey)); 
    } 
} 

Oder das Spiel, um sicherzustellen, ist in den ersten 50 Zeichen:

String input = "Check  this  answer and you can find the keyword with this code"; 
Map<String, String> lookup = new HashMap<String, String>(); 
// Match with^from beginning of string and by placing parentheses we can measure the matched string when match is found. 
lookup.put("(^.*this\\s+answer).*", "Do this"); 
lookup.put("(^.*not\\s+answer).*", "Do that"); 
lookup.put("(^.*example\\s+yes).*", "Dont do"); 


for (String regexKey : lookup.keySet()) { 
    Matcher matchRegexKey = Pattern.compile(regexKey).matcher(input); 
    if (matchRegexKey.matches()) { 
     // Check match is in first 50 chars. 
     if (matchRegexKey.group(1).length() <= 50) { 
      System.out.println(lookup.get(regexKey)); 
     } 
    } 
} 
Verwandte Themen