Vérifier si une chaîne contient un mot, mais seulement dans certaines position?

Comment puis-je vérifier si une chaîne contient une sous-chaîne, mais seulement dans une position?

Exemple de chaîne:

Qu'est-ce que votre préféré couleur? mon [préféré] la couleur est bleu

Si je voulais vérifier si la chaîne de caractères contenue un mot spécifique, j'ai l'habitude de le faire:

var
  S: string;
begin
  S := 'What is your favorite color? my [favorite] color is blue';
  if (Pos('favorite', S) > 0) then
  begin
    //
  end;
end;

Ce dont j'ai besoin est de déterminer si le mot préféré existe dans la chaîne, ignorant si elle apparaît à l'intérieur du [ ] symboles, le code ci-dessus de l'échantillon n'est manifestement pas le faire.

Donc, si nous avons mis le code dans une fonction booléenne, certains résultats de l'échantillon devrait ressembler à ceci:

VRAI: qu'est-Ce que votre préféré couleur? mon [mon préféré] la couleur est bleu

VRAI: qu'est-Ce que votre préféré couleur? mon [bla bla] la couleur est bleu

FAUX: qu'est-Ce que votre bla bla couleur? mon [certains favoris] la couleur est bleu

Les deux premiers exemples ci-dessus sont vraies parce que le mot favori se trouve en dehors de la [ ] les symboles, si elle est à l'intérieur ou pas.

La 3ème échantillon est faux car même si il y a le mot favori, il n'apparaît à l'intérieur de l' [ ] symboles - nous ne devrions vérifier si il existe en dehors des symboles.

J'ai donc besoin d'une fonction pour déterminer si ou non un mot (favori dans cet exemple) apparaît dans une chaîne de caractères, mais en ignorant le fait que si le mot est entouré à l'intérieur de [ ] symboles.

  • Idées: 1) Diviser la chaîne sur le \s et de vérifier pour la 4ème élément. 2) cochez la Case pour "favori" (notez les espaces autour de la parole). 3) Diviser la chaîne sur le point d'interrogation ? et de vérifier ensuite si elle détient favorite.
  • De recherche '[', si trouvé de recherche ']', supprimer dans l'entre-deux, y compris '[]', recherche pour le favori.
  • Ou utiliser une expression régulière (avec les unités incluses dans XE) avec une regex de '\b' + wordtofind + '\b'. La seule chose que vous avez à regarder dehors pour est Is it your favorite?, où la ? ferait-il pas de match.
  • Pour élargir @Ken idée regex, this peut-être une source d'inspiration.
InformationsquelleAutor | 2012-09-11