Cách xác định xem một chuỗi con có nằm trong một chuỗi khác hay không


107

Tôi có một chuỗi phụ:

substring = "please help me out"

Tôi có một chuỗi khác:

string = "please help me out so that I could solve this"

Làm cách nào để tìm xem substringcó phải là một tập hợp con stringsử dụng Python không?

Câu trả lời:


169

với in: substring in string:

>>> substring = "please help me out"
>>> string = "please help me out so that I could solve this"
>>> substring in string
True

10
trời ơi, python quá mạnh, tôi nghĩ nó cần một chức năng để làm việc đó, nhưng nó là một ứng dụng tích hợp sẵn Oo
windound 13/10/12

Tôi chỉ thực sự học JS sau khi học Python, vì điều này bạn sẽ cần thêm vô số câu lệnh if else và những thứ khác. Vì vậy, tôi chỉ muốn nhắc nhở bản thân về cách nó được thực hiện trong Python, câu trả lời này khiến tôi phải tự nói với mình 'Tất nhiên!', Ý tôi là những thứ như thế này trong Python quá tầm thường mà bạn không bao giờ nghĩ nhiều đến họ! : P
Trò chơi thông minh cực đỉnh

@GamesBrainiac Trên thực tế, để làm điều tương tự trong JS, nó chỉ là string.indexOf(substring) != -1, thêm ở đây
LasagnaAndroid

Khi bạn tìm thấy, có chuỗi con tồn tại trong chuỗi, làm cách nào để bạn tìm thấy chuỗi ở vị trí nào và điều gì xảy ra nếu chuỗi con nằm trong chuỗi nhiều lần?
yoshiserry

@yoshiserry nếu bạn muốn vị trí substringtrong string, thì bạn muốn bạn sử dụng string.index
MarcoS

21
foo = "blahblahblah"
bar = "somethingblahblahblahmeep"
if foo in bar:
    # do something

(Nhân tiện - cố gắng không đặt tên cho một biến string, vì có một thư viện chuẩn Python có cùng tên. Bạn có thể khiến mọi người nhầm lẫn nếu bạn làm điều đó trong một dự án lớn, vì vậy tránh va chạm như vậy là một thói quen tốt.)


Không chỉ gây nhầm lẫn mà còn phá vỡ mọi thứ chuỗi tham chiếu sau thời điểm đó.
rplnt

13

Nếu bạn đang tìm kiếm nhiều hơn True / False, bạn sẽ phù hợp nhất để sử dụng mô-đun re, như:

import re
search="please help me out"
fullstring="please help me out so that I could solve this"
s = re.search(search,fullstring)
print(s.group())

s.group() sẽ trả về chuỗi "làm ơn giúp tôi".


1
Mẹo hay về tìm kiếm cụm từ thông dụng.
Randall Cook

trên một lưu ý nhẹ hơn. nếu bạn đang cố gắng giải quyết một điều gì đó với biểu thức chính quy, bạn đang cố gắng giải quyết hai vấn đề.
Hasan Iqbal

10

Tôi nghĩ rằng tôi sẽ thêm điều này trong trường hợp bạn đang xem cách thực hiện điều này cho một cuộc phỏng vấn kỹ thuật mà họ không muốn bạn sử dụng chức năng tích hợp sẵn của Python inhoặc find, điều này thật kinh khủng, nhưng vẫn xảy ra:

string = "Samantha"
word = "man"

def find_sub_string(word, string):
  len_word = len(word)  #returns 3

  for i in range(len(string)-1):
    if string[i: i + len_word] == word:
  return True

  else:
    return False

2
Ví dụ đẹp, nhưng danh tính của bạn không chính xác. Và để tăng tốc độ mọi thứ, tôi cũng nên kiểm tra if len(substring) > len(string) return Falsephạm vi vòng lặp tốt hơn range(len(string)-len(substring))vì bạn sẽ không tìm thấy một từ có ba chữ cái trong hai chữ cái cuối cùng của chuỗi. (Tiết kiệm một vài lần lặp lại).
AnyOneElse

9

Những người đã đề cập string.find(), string.index()string.indexOf()trong các nhận xét, và tôi tóm tắt chúng ở đây (theo Tài liệu Python ):

Trước hết không có một string.indexOf()phương pháp. Liên kết được đăng bởi Deviljho cho thấy đây là một hàm JavaScript.

Thứ hai, string.find()string.index()thực sự trả về chỉ mục của một chuỗi con. Sự khác biệt duy nhất là cách họ xử lý tình huống không tìm thấy chuỗi con: string.find()trả về -1trong khi string.index()tăng một ValueError.


5

Bạn cũng có thể thử phương thức find (). Nó xác định xem chuỗi str xảy ra trong chuỗi hay trong một chuỗi con của chuỗi.

str1 = "please help me out so that I could solve this"
str2 = "please help me out"

if (str1.find(str2)>=0):
  print("True")
else:
  print ("False")

1
In [7]: substring = "please help me out"

In [8]: string = "please help me out so that I could solve this"

In [9]: substring in string
Out[9]: True

1
def find_substring():
    s = 'bobobnnnnbobmmmbosssbob'
    cnt = 0
    for i in range(len(s)):
        if s[i:i+3] == 'bob':
            cnt += 1
    print 'bob found: ' + str(cnt)
    return cnt

def main():
    print(find_substring())

main()

tìm chuỗi con 'bob' trong một chuỗi đã cho.
avina k

0

Cũng có thể sử dụng phương pháp này

if substring in string:
    print(string + '\n Yes located at:'.format(string.find(substring)))

0

nhập mô tả hình ảnh ở đây

Thay vì sử dụng find (), một trong những cách dễ dàng là Sử dụng 'in' như trên.

nếu 'chuỗi con' có trong 'str' thì nếu một phần sẽ thực thi, ngược lại phần khác sẽ thực thi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.