ฉันมีสตริงใน Ruby:
sentence = "My name is Robert"
ฉันจะแทนที่คำใดคำหนึ่งในประโยคนี้ได้อย่างง่ายดายโดยไม่ต้องใช้โค้ดที่ซับซ้อนหรือวนซ้ำ
ฉันมีสตริงใน Ruby:
sentence = "My name is Robert"
ฉันจะแทนที่คำใดคำหนึ่งในประโยคนี้ได้อย่างง่ายดายโดยไม่ต้องใช้โค้ดที่ซับซ้อนหรือวนซ้ำ
คำตอบ:
sentence.sub! 'Robert', 'Joe'
จะไม่ทำให้เกิดข้อยกเว้นถ้าคำที่ถูกแทนที่ไม่อยู่ในประโยค ( []=
ตัวแปรจะ)
ข้างต้นแทนที่อินสแตนซ์แรกของ "Robert" เท่านั้น
ในการแทนที่อินสแตนซ์ทั้งหมดให้ใช้gsub
/ gsub!
(เช่น "การทดแทนทั่วโลก"):
sentence.gsub! 'Robert', 'Joe'
ด้านบนจะแทนที่ทุกกรณีของ Robert ด้วย Joe
หากคุณกำลังจัดการกับข้อความภาษาธรรมชาติและต้องการแทนที่คำไม่ใช่เพียงส่วนหนึ่งของสตริงคุณต้องเพิ่มการแสดงออกปกติใน gsub ของคุณเนื่องจากการแทนที่ข้อความธรรมดาอาจทำให้เกิดผลร้าย:
'mislocated cat, vindicating'.gsub('cat', 'dog')
=> "mislodoged dog, vindidoging"
การแสดงออกปกติมีขอบเขตของคำเช่น\b
ที่ตรงกับจุดเริ่มต้นหรือจุดสิ้นสุดของคำ ดังนั้น
'mislocated cat, vindicating'.gsub(/\bcat\b/, 'dog')
=> "mislocated dog, vindicating"
ใน Ruby ซึ่งแตกต่างจากภาษาอื่น ๆ เช่น Javascript ขอบเขตของคำนั้นเข้ากันได้กับ UTF-8 ดังนั้นคุณสามารถใช้มันสำหรับภาษาที่ไม่มีตัวอักษรละตินหรือละตินที่ขยายออก:
'сіль у кисіль, для весіль'.gsub(/\bсіль\b/, 'цукор')
=> "цукор у кисіль, для весіль"
\b
ไม่ทำงานในภาษาเหล่านั้นคุณจะต้องใช้การวิเคราะห์รูปร่างหรือสิ่งต่าง ๆ เช่นนั้นในกรณีเหล่านั้น นอกจากนี้ +1 สำหรับตัวอย่างที่เฮฮา
คุณสามารถลองใช้วิธีนี้:
sentence ["Robert"] = "Roger"
จากนั้นประโยคจะกลายเป็น:
sentence = "My name is Roger" # Robert is replaced with Roger
IndexError
บน มิฉะนั้นคำที่ไม่เป็นส่วนหนึ่งของประโยคจะนำไปสู่:string not matched (IndexError)
string
ครั้งแรกที่คุณไม่ได้ประกาศชนิดในรูบีดังนั้นคุณจึงไม่จำเป็นต้องเป็นคนแรก
sentence.gsub(/match/, "replacement")
เพื่อแทนที่คำในสตริงที่คุณทำ:
my
)?