Jak mogę sprawdzić, czy ciąg zawiera podłańcuch, ale tylko w określonej pozycji?Sprawdź, czy ciąg zawiera słowo, ale tylko w określonej pozycji?
Przykład ciąg:
Jaki jest Twój ulubionykolor? moja [ulubiony] kolor niebieski
Gdybym chciał sprawdzić, czy ciąg zawierał konkretne słowo I zazwyczaj to zrobić:
var
S: string;
begin
S := 'What is your favorite color? my [favorite] color is blue';
if (Pos('favorite', S) > 0) then
begin
//
end;
end;
Co potrzebne jest, aby określić, czy słowo ulubiony istnieje w ciągu znaków, ignorując jednak, jeśli pojawia się wewnątrz symboli [], czego powyższy przykładowy kod wyraźnie nie robi.
Jeśli więc umieścić kod w funkcji logicznej, niektóre wyniki próbki wyglądałby następująco:
TRUE: Jaki jest Twój ulubionykolor? moja [mój ulubiony] kolor jest niebieski
TRUE: Jaki jest Twój ulubionykolor? moja [bla bla] kolor jest niebieski
FAŁSZ: Jaki jest Twój bla bla kolor? moja [jakiś ulubiony] kolor niebieski
Pierwsze dwie próbki powyżej są prawdziwe, ponieważ ulubione słowo znajduje się poza [] symboli, czy to wewnątrz, czy nie.
Trzecia próbka jest fałszywa, ponieważ nawet jeśli istnieje słowo ulubione, pojawia się tylko wewnątrz symboli [] - powinniśmy tylko sprawdzić, czy istnieje poza symbolami.
Potrzebuję więc funkcji do określenia, czy słowo (ulubione w tym przykładzie) pojawia się w ciągu znaków, ale ignorowanie faktu, jeśli słowo jest otoczone wewnątrz symbolami [].
Pomysły: 1) Podziel ciąg na '\ s' i sprawdź 4. element. 2) Sprawdź "ulubione" (zwróć uwagę na spacje wokół słowa). 3) Podziel ciąg znaków na znak zapytania '?', A następnie sprawdź, czy zawiera 'ulubiony'. –
Wyszukaj "[", jeśli znaleziono wyszukiwanie "]", usuń pośrednie, w tym "[]", wyszukaj ulubione. –
Lub użyj wyrażenia regularnego (z jednostkami zawartymi w XE) z wyrażeniem "'\ b" + wordtofind +' \ b''. Jedyne, na co musisz uważać, to "Czy to twoje ulubione?", Gdzie "?" Spowodowałoby, że nie byłoby to zgodne. –