ฉันจะแทนที่การปรากฏตัวครั้งแรกของตัวละครในทุกคำได้อย่างไร
พูดว่าฉันมีสายนี้:
hello @jon i am @@here or @@@there and want some@thing in '@here"
# ^ ^^ ^^^ ^ ^
และฉันต้องการที่จะลบคำแรก@
ในทุกคำเพื่อที่ฉันจะได้สตริงสุดท้ายดังนี้:
hello jon i am @here or @@there and want something in 'here
# ^ ^ ^^ ^ ^
เพียงเพื่อความกระจ่างตัวอักษร "@" จะปรากฏขึ้นพร้อมกันทุกคำ แต่อาจเป็นตัวเริ่มต้นของคำหรือระหว่างตัวอักษรอื่น ๆ
ฉันจัดการเพื่อลบอักขระ "@" ถ้ามันเกิดขึ้นเพียงครั้งเดียวโดยใช้รูปแบบของ regex ที่ฉันพบในDelete substring เมื่อมันเกิดขึ้นครั้งเดียว แต่ไม่ใช่เมื่อสองครั้งในแถวในหลามซึ่งใช้ lookahead เชิงลบและ lookbehind เชิงลบ:
@(?!@)(?<!@@)
ดูผลลัพธ์:
>>> s = "hello @jon i am @@here or @@@there and want some@thing in '@here"
>>> re.sub(r'@(?!@)(?<!@@)', '', s)
"hello jon i am @@here or @@@there and want something in 'here"
ดังนั้นขั้นตอนต่อไปคือการแทนที่ "@" เมื่อมันเกิดขึ้นมากกว่าหนึ่งครั้ง การดำเนินการนี้ทำได้ง่ายโดยs.replace('@@', '@')
ลบ "@" ออกจากที่ใดก็ตามที่เกิดขึ้นอีกครั้ง
อย่างไรก็ตามฉันสงสัยว่า: มีวิธีใดที่จะทดแทนสิ่งนี้ได้ในนัดเดียว?
@Hello@There
ที่@
จะไม่ติดต่อกัน?