Obtenir le texte qui suit, après la correspondance de la regex
Je suis nouveau à l'aide de Regex, j'ai été en passant par un râteau de tutoriels mais je n'ai pas trouvé un qui s'applique à ce que je veux faire,
Je veux à la recherche de quelque chose, mais qui reviennent tout ce qui suit, mais pas la chaîne de recherche lui-même
par exemple "Certains boiteux phrase qui est génial"
de la recherche pour "phrase"
retour "qui est génial"
Toute aide serait grandement appréciée
C'est ma regex jusqu'à présent
sentence(.*)
mais il retourne: phrase qui est génial
Pattern pattern = Pattern.compile("sentence(.*)");
Matcher matcher = pattern.matcher("some lame sentence that is awesome");
boolean found = false;
while (matcher.find())
{
System.out.println("I found the text: " + matcher.group().toString());
found = true;
}
if (!found)
{
System.out.println("I didn't find the text");
}
- Quel est votre appel? Êtes-vous à l'aide de
Matcher
? - Je suis en utilisant le comparateur et le modèle
- ... et on a quand même envie de voir votre code Java dans afin de les aider à évaluer ce qui est mauvais.
System.out.println("I found the text: " + "some lame sentance that is aweomse".substring(end()));
- +1 si vous êtes un nazi de la grammaire comme moi
- Nazi doit disposer d'un capital N...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire avec un "expression régulière" comme vous l'avez demandé dans un commentaire:
(?<=sentence)
est un positif lookbehind affirmation. Cela correspond à une certaine position dans la chaîne, à savoir à une position juste après le textesentence
, sans texte lui-même partie du match. Par conséquent,(?<=sentence).*
correspond à tout le texte aprèssentence
.C'est une jolie caractéristique de regex. Toutefois, en Java, cela ne fonctionne que pour de longueur finie de sous-expressions, j'. e.
(?<=sentence|word|(foo){1,4})
est légal, mais(?<=sentence\s*)
ne l'est pas..*
correspond à n'importe quel texte, puis(?<=...)
regarde en arrière pour le motsentence
, affirmant dans ce cas que le match se termine avec le mot. Si vous souhaitez vous arrêter avant que word, vous devez regarder avant:.*(?=sentence)
correspond à tout texte qui est suivie parsentence
.Votre regex
"sentence(.*)"
est droit. Pour récupérer le contenu du groupe entre parenthèses, vous pouvez appeler:Notez l'utilisation de
m.find()
dans ce cas (les tentatives pour trouver n'importe où sur la chaîne) et pasm.matches()
(échouerait à cause du préfixe "certains boiteux"; dans ce cas, la regex aurait besoin d'être".*sentence(.*)"
)si Matcher est initialisé avec
str
, après le match, vous pouvez obtenir la partie après le match avecExemple De Code:
De sortie:
matcher.find()
est nécessaire avant cela, de l'OMI.Vous devez utiliser le groupe(int) de votre comparateur de groupe(0) est l'ensemble du match, et le groupe(1) est le premier groupe que vous avez marqué. Dans l'exemple que vous spécifiez, groupe(1) c'est ce qui vient après "phrase".
Vous avez juste besoin de mettre "du groupe(1)" au lieu de "groupe de()" dans la ligne suivante et le retour sera celui que vous attendiez: