¿Cómo puedo verificar si una cadena contiene una subcadena, pero solo en una posición específica?¿Verifica si una cadena contiene una palabra pero solo en una posición específica?
Ejemplo cadena:
¿Cuál es su color favorito ? mi [favorita] color es azul
Si quería comprobar si la cadena contiene una palabra específica que suelo hacer esto:
var
S: string;
begin
S := 'What is your favorite color? my [favorite] color is blue';
if (Pos('favorite', S) > 0) then
begin
//
end;
end;
Lo que necesito es para determinar si la palabra favorita existe en la cadena, ignorando sin embargo si aparece dentro de los símbolos [], lo que la muestra de código anterior claramente no hace.
Así que si ponemos el código en una función booleana, algunos resultados de la muestra se vería así:
VERDADERO: ¿Cuál es su color favorito ? mi [mi favorito] color es azul
VERDADERO: ¿Cuál es su color favorito ? mi [bla bla] color es azul
FALSO: ¿Cuál es su bla bla color? mi [alguna favorita] color es azul
Las primeras dos muestras anteriores son verdad porque la palabra favorita se encuentra fuera de los símbolos [], ya sea dentro de ellos o no.
La tercera muestra es falsa porque, aunque hay una palabra favorita, solo aparece dentro de los símbolos []; solo debemos verificar si existe fuera de los símbolos.
Necesito una función para determinar si una palabra (favorita en este ejemplo) aparece en una cadena, pero ignorando el hecho si la palabra está rodeada dentro de los símbolos [].
Ideas: 1) Divida la cuerda en el '\ s' y busque el 4º elemento. 2) Verifique 'favorite' (tenga en cuenta los espacios alrededor de la palabra). 3) Divida la cadena en el signo de interrogación '?' Y luego verifique si contiene 'favorite'. –
Buscar '[', si se encuentra la búsqueda ']', eliminar entre-incluyendo '[]', buscar favorito. –
O use una expresión regular (con unidades incluidas en XE) con una expresión regular de ''\ b' + wordtofind + '\ b''. Lo único que tienes que tener en cuenta es '¿Es tu favorito?', Donde el '' 'haría que no coincida. –