Imaginez que nous ayons une longue chaîne contenant les sous-chaînes 'cat' et 'dog' ainsi que d'autres caractères aléatoires, par ex.Problème de correspondance de motif de cordes
cat x dog cat x cat x dog x dog x cat x dog x cat
Ici 'x' représente toute séquence aléatoire de caractères (mais pas 'cat' ou 'dog'). Ce que je veux faire est de trouver chaque «chat» qui est suivi par tous les caractères sauf «chien», puis par «chat». Je veux supprimer cette première instance de 'chat' dans chaque cas.
Dans ce cas, je veux enlever le [cat] entre crochets parce qu'il n'y a pas de « chien » après avant le prochain « chat »:
cat x dog [cat] x cat x dog x dog x cat x dog x cat
Pour terminer avec:
cat x dog x cat x dog x dog x cat x dog x cat
Comment cela peut-il être fait?
Je pensais que l'utilisation d'une certaine manière une expression régulière comme (n) (? = (N)) comme VonC recommandé here
(cat)(?=(.*cat))
pour correspondre à toutes les paires de 'chat' dans la chaîne. Mais je ne suis toujours pas sûr de savoir comment je pourrais utiliser ceci pour enlever chaque chat qui n'est pas suivi de 'chien' avant 'chat'.
Le vrai problème que j'aborde est en Java. Mais je suis vraiment à la recherche d'une solution générale pseudocode/regex.
Salut. Il serait utile de savoir dans quelle langue vous travaillez. –
@klausbyskov: Êtes-vous sûr de cette modification? Les deux phrases suivantes et l'exemple me semblent indiquer que "suivi" est bien ce qu'il voulait dire. –
Je voulais dire 'suivi' non précédé! – nodmonkey