Attualmente sto cercando di risolvere un problema da codingbat.com con espressioni regolari.Iterazione tramite stringa con .find() in Java espressione regolare
Sono nuovo per questo, quindi le spiegazioni passo-passo sarebbero apprezzate. Potrei risolvere questo problema con metodi String in modo relativamente semplice, ma sto cercando di usare espressioni regolari.
Ecco il prompt: Dato una stringa e una stringa di parole non vuota, restituisce una stringa composta da ciascun carattere appena prima e subito dopo ogni aspetto della parola nella stringa. Ignora i casi in cui non vi è alcun carattere prima o dopo la parola e un carattere può essere incluso due volte se si trova tra due parole.
wordEnds("abcXY123XYijk", "XY") → "c13i"
wordEnds("XY123XY", "XY") → "13"
wordEnds("XY1XY", "XY") → "11"
ecc
Il mio codice finora:
String regex = ".?" + word+ ".?";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
String newStr = "";
while(m.find())
newStr += m.group().replace(word, "");
return newStr;
Il problema è che quando ci sono più istanze di parola in una riga, il programma manca il carattere che precede la parola perché m. find() va oltre.
Ad esempio: wordEnds("abc1xyz1i1j", "1")
dovrebbe restituire "cxziij"
, ma il mio metodo restituisce "cxzij"
, non ripetere il "i"
Gradirei una soluzione non-disordinato con una spiegazione posso applicare ad altri problemi regex generale.
Vai a questa risposta sulle espressioni look-giro regolare http: // StackOverflow. com/a/2995621/324900 – Reddy
davvero utile, grazie – Rishi
felice di essere di aiuto! :) – Reddy