Làm cách nào để kiểm tra xem chuỗi có chứa chuỗi con không, nhưng chỉ ở một vị trí cụ thể?Kiểm tra xem một chuỗi có chứa một từ nhưng chỉ ở vị trí cụ thể không?
chuỗi Ví dụ:
yêu thích màu của bạn là gì? tôi [yêu thích] màu sắc là màu xanh
Nếu tôi muốn kiểm tra xem chuỗi chứa một từ cụ thể Tôi thường làm điều này:
var
S: string;
begin
S := 'What is your favorite color? my [favorite] color is blue';
if (Pos('favorite', S) > 0) then
begin
//
end;
end;
Những gì tôi cần là để xác định xem từ yêu thích tồn tại trong chuỗi, bỏ qua mặc dù nó xuất hiện bên trong các biểu tượng [], mà mẫu mã trên không rõ ràng.
Vì vậy, nếu chúng ta đặt mã vào một hàm boolean, một số kết quả mẫu sẽ trông như thế này:
TRUE: yêu thích màu của bạn là gì? màu của tôi [yêu thích] màu của chúng tôi là
ĐÚNG: yêu thích của bạn là gì màu? tôi [blah blah] màu sắc là màu xanh
FALSE: blah blah màu của bạn là gì? tôi [một số yêu thích] màu sắc là màu xanh
Hai mẫu đầu tiên ở trên là đúng sự thật vì yêu thích từ được tìm thấy bên ngoài của những biểu tượng [], cho dù đó là bên trong chúng hay không.
Mẫu thứ 3 là sai vì mặc dù có từ yêu thích, nó chỉ xuất hiện bên trong ký hiệu [] - chúng tôi chỉ nên kiểm tra xem nó có tồn tại bên ngoài ký hiệu hay không. Vì vậy, tôi cần một chức năng để xác định có hay không một từ (yêu thích trong ví dụ này) xuất hiện trong một chuỗi, nhưng bỏ qua thực tế nếu từ được bao quanh bên trong các ký hiệu [].
Ý tưởng: 1) Tách chuỗi trên '\ s' và kiểm tra phần tử thứ 4. 2) Kiểm tra 'yêu thích' (lưu ý các khoảng trống xung quanh từ). 3) Tách chuỗi trên dấu hỏi '?' Và sau đó kiểm tra xem nó có giữ 'yêu thích' hay không. –
Tìm kiếm '[', nếu tìm thấy tìm kiếm ']', xóa ở giữa bao gồm '[]', tìm kiếm mục ưa thích. –
Hoặc sử dụng cụm từ thông dụng (với các đơn vị được bao gồm trong XE) với một regex của ''\ b' + wordtofind + '\ b''. Điều duy nhất bạn phải chú ý là “Nó có phải là yêu thích của bạn không?”, Nơi '? 'Sẽ làm cho nó không khớp. –