วิธีตรวจสอบว่าสตริงย่อยอยู่ในสตริงอื่นหรือไม่


107

ฉันมีสตริงย่อย:

substring = "please help me out"

ฉันมีสตริงอื่น:

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

ฉันจะทราบได้อย่างไรว่าsubstringเป็นส่วนย่อยของการstringใช้ Python

คำตอบ:


169

กับ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
เอ้ยหลามแรงเกินไปฉันคิดว่ามันต้องการฟังก์ชั่นในการทำ แต่มันเป็นแบบ build-in one Oo
windsound

จริงๆแล้วฉันเพิ่งเรียนรู้ JS หลังจากเรียน Python สำหรับสิ่งนี้คุณจะต้องเพิ่มคำสั่ง if else และสิ่งอื่น ๆ อีกมากมาย ดังนั้นฉันแค่อยากจะเตือนตัวเองว่ามันเป็นอย่างไรใน Python คำตอบนี้ทำให้ฉันพูดกับตัวเองว่า 'แน่นอน!' ฉันหมายความว่าสิ่งนี้ใน Python เป็นเรื่องเล็กน้อยที่คุณไม่เคยให้ความคิดมาก! : P
Games Brainiac

@GamesBrainiac จริงๆแล้วการทำเช่นเดียวกันใน JS มันเป็นเพียงแค่string.indexOf(substring) != -1มากขึ้นที่นี่
LasagnaAndroid

เมื่อคุณพบว่าสตริงย่อยมีอยู่ในสตริงแล้วคุณจะพบว่าตำแหน่งใดเป็นสตริงได้อย่างไรและจะเกิดอะไรขึ้นถ้าสตริงย่อยอยู่ในสตริงมากกว่าหนึ่งครั้ง
yoshiserry

@yoshiserry ถ้าคุณต้องการตำแหน่งsubstringในstringคุณต้องการให้คุณใช้string.index
MarcoS

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

(อย่างไรก็ตาม - พยายามอย่าตั้งชื่อตัวแปรstringเนื่องจากมีไลบรารีมาตรฐาน Python ที่มีชื่อเดียวกันคุณอาจทำให้ผู้อื่นสับสนหากคุณทำเช่นนั้นในโครงการขนาดใหญ่ดังนั้นการหลีกเลี่ยงการชนกันแบบนั้นจึงเป็นนิสัยที่ดีที่จะเข้าไป)


ไม่เพียงสร้างความสับสน แต่ยังทำลายสตริงการอ้างอิงทั้งหมดหลังจากจุดนั้น
rplnt

13

หากคุณกำลังมองหามากกว่า True / False คุณเหมาะที่สุดที่จะใช้ re module เช่น:

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() จะส่งคืนสตริง "โปรดช่วยฉันด้วย"


1
เคล็ดลับดีๆเกี่ยวกับการค้นหานิพจน์ทั่วไป
Randall Cook

ในบันทึกที่เบากว่า หากคุณกำลังพยายามแก้ปัญหาด้วยนิพจน์ทั่วไปคุณกำลังพยายามแก้ปัญหาสองประการ
Hasan Iqbal

10

คิดว่าฉันจะเพิ่มสิ่งนี้ในกรณีที่คุณกำลังดูวิธีการทำสิ่งนี้สำหรับการสัมภาษณ์ทางเทคนิคที่พวกเขาไม่ต้องการให้คุณใช้ฟังก์ชันในตัวของ Python inหรือfindซึ่งน่ากลัว แต่จะเกิดขึ้น:

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
เป็นตัวอย่างที่ดี แต่การระบุตัวตนของคุณไม่ถูกต้อง และเพื่อให้เร็วขึ้นฉันควรตรวจสอบif len(substring) > len(string) return Falseช่วงลูปด้วยควรจะดีกว่าrange(len(string)-len(substring))เพราะคุณจะไม่พบคำสามตัวในสองตัวอักษรสุดท้ายของสตริง (บันทึกการทำซ้ำเล็กน้อย)
AnyOneElse

9

คนที่กล่าวถึงstring.find(), string.index()และstring.indexOf()ในความคิดเห็นและผมสรุปได้ที่นี่ (ตามเอกสาร Python ):

ก่อนอื่นไม่มีstring.indexOf()วิธีการ ลิงก์ที่โพสต์โดย Deviljho แสดงให้เห็นว่านี่เป็นฟังก์ชัน JavaScript

ประการที่สองstring.find()และstring.index()คืนค่าดัชนีของสตริงย่อย ข้อแตกต่างเพียงอย่างเดียวคือวิธีจัดการกับสถานการณ์ที่ไม่พบสตริงย่อย: string.find()ส่งกลับ-1ในขณะที่string.index()เพิ่มValueErrorไฟล์.


5

คุณยังสามารถลองค้นหา () วิธีการ กำหนดว่าสตริง str เกิดขึ้นในสตริงหรือในสตริงย่อยของสตริง

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
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()

ค้นหาสตริงย่อย 'bob' ในสตริงที่กำหนด
avina k


0

ใส่คำอธิบายภาพที่นี่

แทนที่จะใช้ find () วิธีง่ายๆวิธีหนึ่งคือการใช้ 'in' ดังที่กล่าวมา

หาก 'สตริงย่อย' อยู่ใน 'str' ถ้าส่วนหนึ่งจะดำเนินการอย่างอื่นส่วนอื่นจะดำเนินการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.