2016-11-30 3 views
1

Ich habe eine vollständige Zeichenfolge wie folgt - "Hallo ihr alle" und ich habe ein schlechtes Wort wie "alle" jetzt habe ich die zweite Zeichenfolge in der ersten gefunden, die ist einfach, , aber lassen Sie uns sagen, meine erste Zeichenfolge ist "Hallo alle Jungs" oder "Hallo ein, l, ich euch" oder sogar "Hallo ihr alle" gibt es einen Regex Weg, um es zu finden? , was ich so weit gekommen istversuchen, ein Wort mit Trennzeichen in der Zeichenfolge zu finden

String wordtocheck =pair.getKey().toString(); 
String newerstr = ""; 
for(int i=0;i<wordtocheck.length();i++) 
    newerstr+=wordtocheck.charAt(i)+"\\."; 
Pattern.compile("(?i)\\b(newerstr)(?=\\W)").matcher(currentText.toString()); 

aber es ist nicht der Trick Dank an alle Helfer macht

+1

Kann es sein 'Hallo A. L, l? Leute? –

+0

ja, das ist ein guter Punkt, kann es sein oder sogar "a.l l" – yanivtwin

Antwort

1

Sie das Muster dynamisch durch Einfügen \W* (= null oder mehr Nicht-Wort aufbauen kann

String s = "Hello a l l you guys"; 
String key = "all"; 
String pat = "(?i)\\b" + TextUtils.join("\\W*", key.split("")) + "\\b"; 
System.out.println("Pattern: " + pat); 
Matcher m = Pattern.compile(pat).matcher(s); 
if (m.find()) 
{ 
    System.out.println("Found: " + m.group()); 
} 

die online demo (String.join verwendet Siehe statt: Zeichen, das heißt, Zeichen, die keine Buchstaben, Ziffern oder Unterstrich) zwischen den Zeichen eines Keywords sind für die Suche TextUtils.join da dies eine Java-Demo)

Wenn es nicht-Wort Zeichen in den Suchworten sein, Sie \b Wortgrenzen mit (?<!\\S) (die anfänglichen \b) und (?!\\S) (statt dem Hinter \b) ersetzen müssen, oder vollständig entfernen.

+1

was ist mit anderen schlechten worten (alles ist nur wie ein beispiel), es kann mehrere worte sein dann, wie Sie verwalten können? –

+0

@mohanrathour: Und was ist das Problem mit diesem Szenario? Hast Du es versucht? Sehen Sie [die Online-Demo] (https://ideone.com/QYYyX2), die zeigt, wie 'all you' in' Hello a l l you you 'gefunden wurde. –

+0

Ich habe soeben die Option für eingebettete Flags ohne Berücksichtigung der Groß- und Kleinschreibung hinzugefügt, wie sie im OP verwendet wurde. –

0

Versuchen Sie, diese

String str="Hello .a-l l? guys"; 
    str=str.replaceAll("\\W",""); //replaces all non-words chars with empty string. 

str jetzt "Helloallguys"

+0

Wenn jedoch überprüft werden muss, wie die Suchzeichenfolge im Text gefunden wird, funktioniert diese Methode nicht. –

Verwandte Themen