วิธีใช้ string.replace () ใน python 3.x


280

string.replace () เลิกใช้แล้วใน python 3.x วิธีใหม่ในการทำเช่นนี้คืออะไร?


11
FWIW ฉันมีความสับสนเหมือนกัน Google "งูหลามแทนที่สตริง" พาฉันไปฟังก์ชั่นสตริงเก่าที่เลิกใช้แล้วในงูหลาม 2.7 IMHO ส่วนนั้นอาจใช้กล่องตัวหนาขนาดใหญ่อธิบาย "string.xxx ()" vs "xxx (สตริง)" และนำผู้คนไปยังวิธีสตริงที่ไม่คัดค้านเช่นdocs.python.org/library/stdtypes.html # string-methods
ToolmakerSteve

8
เอกสาร Python เป็นความโกลาหลอย่างสมบูรณ์เนื่องจากเป็นภาษาแรกที่สมบูรณ์แบบ บ่อยครั้งที่สิ่งต่าง ๆ อยู่ที่นั่น แต่เนื่องจากวิธีการจัดระเบียบที่ไม่ดีมันมักจะไม่ได้รับการจัดทำดัชนีที่ดีโดยเครื่องมือค้นหาหรือแม้แต่เว็บไซต์ของตนเอง ดูที่ลิงค์ของ ToolMakerSteve ฟังก์ชั่นสตริงหลักจะถูกจัดให้อยู่ในประเภทมาตรฐาน สิ่งนี้จะไม่เกิดขึ้นเมื่อคุณค้นหาฟังก์ชันสตริง
Andrew S

10
เพื่อให้ชัดเจน: string.replace () จริง ๆ แล้วไม่ได้คัดค้านบน Python 3
sboggs11

2
มันอยู่ในรูปแบบในตัวสำหรับ 3.x docs.python.org/3.7/library/stdtypes.html#str.replace
JerodG

1
บางครั้งคนเขียน "str.replace" เมื่อพวกเขาหมายถึง [ตัวแปรสตริงของคุณ] .replace เนื่องจาก 'str' เป็นชื่อของคลาสที่เกี่ยวข้องด้วยซึ่งอาจทำให้สับสนได้
TextGeek

คำตอบ:


315

ในฐานะที่เป็น 2.x str.replace()ใช้

ตัวอย่าง:

>>> 'Hello world'.replace('world', 'Guido')
'Hello Guido'

4
โมดูล "re" (นิพจน์ปกติ) มีทางเลือกสำหรับฟังก์ชั่นสตริง (some? all?) ที่คัดค้าน ในกรณีre.sub()นี้
ToolmakerSteve

8
@ToolmakerSteve: stringฟังก์ชันเลิกใช้แล้ว strวิธีการไม่ได้
Ignacio Vazquez-Abrams

6
FWIW เมื่อใดก็ตามที่ฉัน google ฉันดูเหมือนจะจบลงที่ฟังก์ชั่นสตริงเก่าที่คัดค้าน นี่คือลิงก์ไปยังเมธอดสตริง (ไม่คัดค้าน) docs.python.org/3.3/library/stdtypes.html#string-methods ~ or_for_2 ~ docs.python.org/2/library/stdtypes.html#string-methods
ToolmakerSteve

36
ถ้าฉันต้องสแต็คโอเวอร์โฟลว์เพื่อสำรวจเอกสาร Python มีปัญหาชัดเจน ทีม Python หากคุณกำลังอ่าน เรียงลำดับออก!
Andrew S

2
เรียกใช้เมธอดบนวัตถุไม่ใช่คลาส 'foo'.replace(...)
Ignacio Vazquez-Abrams


13

เมธอด replace () ใน python 3 ถูกใช้โดย:

a = "This is the island of istanbul"
print (a.replace("is" , "was" , 3))

#3 is the maximum replacement that can be done in the string#

>>> Thwas was the wasland of istanbul

# Last substring 'is' in istanbul is not replaced by was because maximum of 3 has already been reached

2
โปรดจำไว้ว่านอกจากนี้คุณไม่สามารถใส่ 3 และมันจะเปลี่ยนความบังเอิญทั้งหมด
Ender ดู

4

คุณสามารถใช้str.replace ()เป็นห่วงโซ่ของstr.replace () คิดว่าคุณมีสตริงเหมือน'Testing PRI/Sec (#434242332;PP:432:133423846,335)'และคุณต้องการที่จะเข้ามาแทนที่ทั้งหมดเข้าสู่ระบบด้วย'#',':',';','/' '-'คุณสามารถแทนที่มันด้วยวิธีนี้ (วิธีปกติ)

>>> str = 'Testing PRI/Sec (#434242332;PP:432:133423846,335)'
>>> str = str.replace('#', '-')
>>> str = str.replace(':', '-')
>>> str = str.replace(';', '-')
>>> str = str.replace('/', '-')
>>> str
'Testing PRI-Sec (-434242332-PP-432-133423846,335)'

หรือด้วยวิธีนี้ (chain of str.replace () )

>>> str = 'Testing PRI/Sec (#434242332;PP:432:133423846,335)'.replace('#', '-').replace(':', '-').replace(';', '-').replace('/', '-')
>>> str
'Testing PRI-Sec (-434242332-PP-432-133423846,335)'


1

FYI เมื่อผนวกอักขระบางตัวไปยังพลคำตำแหน่งคงที่ภายในสตริง (เช่นการเปลี่ยนคำคุณศัพท์เพื่อคำวิเศษณ์โดยการเพิ่มคำต่อท้าย-ly ), คุณสามารถใส่ต่อท้ายที่ท้ายบรรทัดสำหรับการอ่าน หากต้องการทำสิ่งนี้ให้ใช้split()ภายในreplace():

s="The dog is large small"
ss=s.replace(s.split()[3],s.split()[3]+'ly')
ss
'The dog is largely small'

0
ss = s.replace(s.split()[1], +s.split()[1] + 'gy')
# should have no plus after the comma --i.e.,
ss = s.replace(s.split()[1], s.split()[1] + 'gy')

6
ในขณะที่รหัสนี้อาจตอบคำถามการให้บริบทเพิ่มเติมเกี่ยวกับสาเหตุและ / หรือวิธีการตอบคำถามนั้นจะช่วยปรับปรุงมูลค่าระยะยาวอย่างมีนัยสำคัญ โปรดแก้ไขคำตอบของคุณเพื่อเพิ่มคำอธิบาย
CodeMouse92

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