Hướng dẫn how do you match a complete word in python? - làm thế nào để bạn khớp một từ hoàn chỉnh trong python?

Tôi nghĩ rằng hành vi mong muốn của OP không hoàn toàn đạt được bằng cách sử dụng các câu trả lời được đưa ra. Cụ thể, đầu ra mong muốn của Boolean đã không được hoàn thành. Các câu trả lời được đưa ra giúp minh họa cho khái niệm này, và tôi nghĩ rằng chúng là tuyệt vời. Có lẽ tôi có thể minh họa những gì tôi muốn nói bằng cách nói rằng tôi nghĩ rằng OP đã sử dụng các ví dụ được sử dụng vì những điều sau đây.

Chuỗi được đưa ra là,

a = "this is a sample"

OP sau đó đã nêu,

Tôi muốn khớp toàn bộ từ - ví dụ khớp "hi" sẽ trả về False"hi" không phải là một từ ...

Theo tôi hiểu, tài liệu tham khảo là mã thông báo tìm kiếm, "hi" như được tìm thấy trong từ,

find_only_whole_word(search_string, input_string)
2. Nếu ai đó tìm kiếm chuỗi,
find_only_whole_word(search_string, input_string)
3 cho từ "hi", họ sẽ nhận False làm phản hồi.word "hi", they should receive False as the response.

OP tiếp tục,

... và

find_only_whole_word(search_string, input_string)
6 nên trả lại
find_only_whole_word(search_string, input_string)
7 vì không có ký tự alpha ở bên trái và bên phải.

Trong trường hợp này, tham chiếu là mã thông báo tìm kiếm

find_only_whole_word(search_string, input_string)
6 vì nó được tìm thấy trong từ
find_only_whole_word(search_string, input_string)
6. Tôi hy vọng điều này giúp làm rõ mọi thứ về lý do tại sao chúng ta sử dụng ranh giới từ. Các câu trả lời khác có hành vi của "Đừng trả lại một từ trừ khi từ đó được tìm thấy - không phải bên trong các từ khác." Lớp nhân vật tốc ký "ranh giới từ" thực hiện công việc này một cách độc đáo.

Chỉ có từ

find_only_whole_word(search_string, input_string)
6 đã được sử dụng trong các ví dụ cho đến thời điểm này. Tôi nghĩ rằng những câu trả lời này là chính xác, nhưng tôi nghĩ rằng có nhiều ý nghĩa cơ bản của câu hỏi cần được giải quyết. Hành vi của các chuỗi tìm kiếm khác cần được ghi nhận để hiểu khái niệm này. Nói cách khác, chúng ta cần khái quát hóa câu trả lời (xuất sắc) của @Georg bằng cách sử dụng
>>> a = "this is a sample"
>>> find_only_whole_word("hi", a)
False
>>> find_only_whole_word("is", a)
True
1 Khái niệm tương tự

>>> y="this isis a sample."
>>> regex=re.compile(r"\bis\b")  # For ignore case: re.compile(r"\bis\b", re.IGNORECASE)
>>> regex.findall(y)
[]

Giả sử phương pháp nên thể hiện hành vi tôi đã thảo luận được đặt tên

find_only_whole_word(search_string, input_string)

Các hành vi sau đây nên được mong đợi.

>>> a = "this is a sample"
>>> find_only_whole_word("hi", a)
False
>>> find_only_whole_word("is", a)
True

Một lần nữa, đây là cách tôi hiểu câu hỏi của OP. Chúng tôi có một bước hướng tới hành vi đó với câu trả lời từ @Georg, nhưng hơi khó để diễn giải/thực hiện. để dí dỏm

>>> import re
>>> a = "this is a sample"
>>> re.search(r"\bis\b", a)
<_sre.SRE_Match object; span=(5, 7), match='is'>
>>> re.search(r"\bhi\b", a)
>>>

Không có đầu ra từ lệnh thứ hai. Câu trả lời hữu ích từ @omprakesh hiển thị đầu ra, nhưng không phải

find_only_whole_word(search_string, input_string)
7 hoặc False.

Đây là một mẫu đầy đủ hơn về hành vi được mong đợi.

>>> find_only_whole_word("this", a)
True
>>> find_only_whole_word("is", a)
True
>>> find_only_whole_word("a", a)
True
>>> find_only_whole_word("sample", a)
True
# Use "ample", part of the word, "sample": (s)ample
>>> find_only_whole_word("ample", a)
False
# (t)his
>>> find_only_whole_word("his", a)
False
# (sa)mpl(e)
>>> find_only_whole_word("mpl", a)
False
# Any random word
>>> find_only_whole_word("applesauce", a)
False
>>>

Điều này có thể được thực hiện bằng mã sau:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
#@file find_only_whole_word.py

import re

def find_only_whole_word(search_string, input_string):
  # Create a raw string with word boundaries from the user's input_string
  raw_search_string = r"\b" + search_string + r"\b"

  match_output = re.search(raw_search_string, input_string)
  ##As noted by @OmPrakesh, if you want to ignore case, uncomment
  ##the next two lines
  #match_output = re.search(raw_search_string, input_string, 
  #                         flags=re.IGNORECASE)

  no_match_was_found = ( match_output is None )
  if no_match_was_found:
    return False
  else:
    return True

##endof:  find_only_whole_word(search_string, input_string)

Một cuộc biểu tình đơn giản theo sau. Chạy trình thông dịch Python từ cùng một thư mục nơi bạn đã lưu tệp,

>>> a = "this is a sample"
>>> find_only_whole_word("hi", a)
False
>>> find_only_whole_word("is", a)
True
5.

>>> from find_only_whole_word import find_only_whole_word
>>> a = "this is a sample"
>>> find_only_whole_word("hi", a)
False
>>> find_only_whole_word("is", a)
True
>>> find_only_whole_word("cucumber", a)
False
# The excellent example from @OmPrakash
>>> find_only_whole_word("is", "this isis a sample")
False
>>>