ฉันมีสาย ฉันจะลบข้อความทั้งหมดหลังจากตัวละครบางตัวได้อย่างไร ( ในกรณีนี้...
)
ข้อความหลังจากนั้นจะ...
เปลี่ยนดังนั้นฉันจึงเป็นเหตุผลที่ฉันต้องการลบตัวละครทั้งหมดหลังจากที่หนึ่ง
ฉันมีสาย ฉันจะลบข้อความทั้งหมดหลังจากตัวละครบางตัวได้อย่างไร ( ในกรณีนี้...
)
ข้อความหลังจากนั้นจะ...
เปลี่ยนดังนั้นฉันจึงเป็นเหตุผลที่ฉันต้องการลบตัวละครทั้งหมดหลังจากที่หนึ่ง
คำตอบ:
แยกบนตัวแยกของคุณมากที่สุดและใช้ชิ้นแรก:
sep = '...'
rest = text.split(sep, 1)[0]
คุณไม่ได้พูดว่าจะเกิดอะไรขึ้นหากไม่มีตัวคั่น ทั้งวิธีนี้และโซลูชันของ Alex จะคืนค่าสตริงทั้งหมดในกรณีนั้น
สมมติว่าตัวคั่นของคุณคือ '... ' แต่อาจเป็นสตริงใดก็ได้
text = 'some string... this part will be removed.'
head, sep, tail = text.partition('...')
>>> print head
some string
หากไม่พบตัวคั่นhead
จะประกอบด้วยสตริงเดิมทั้งหมด
มีการเพิ่มฟังก์ชันพาร์ติชันใน Python 2.5
partition (... ) S.partition (sep) -> (head, sep, tail)
Searches for the separator sep in S, and returns the part before it, the separator itself, and the part after it. If the separator is not found, returns S and two empty strings.
หากคุณต้องการลบทุกอย่างหลังจากการเกิดขึ้นครั้งสุดท้ายของตัวแยกในสตริงฉันพบว่าทำงานได้ดี:
<separator>.join(string_to_split.split(<separator>)[:-1])
ตัวอย่างเช่นหาก string_to_split
เป็นเส้นทางที่ต้องการroot/location/child/too_far.exe
และคุณต้องการเส้นทางโฟลเดอร์เท่านั้นคุณสามารถแยกตาม"/".join(string_to_split.split("/")[:-1])
และคุณจะได้รับ
root/location/child
ไม่มี RE (ซึ่งฉันถือว่าเป็นสิ่งที่คุณต้องการ):
def remafterellipsis(text):
where_ellipsis = text.find('...')
if where_ellipsis == -1:
return text
return text[:where_ellipsis + 3]
หรือด้วย RE:
import re
def remwithre(text, there=re.compile(re.escape('...')+'.*')):
return there.sub('', text)
เมธอด find จะส่งคืนตำแหน่งอักขระในสตริง จากนั้นถ้าคุณต้องการลบทุกสิ่งออกจากตัวละครทำสิ่งนี้:
mystring = "123⋯567"
mystring[ 0 : mystring.index("⋯")]
>> '123'
หากคุณต้องการเก็บตัวละครไว้ให้เพิ่ม 1 ไปยังตำแหน่งตัวละคร
import re
test = "This is a test...we should not be able to see this"
res = re.sub(r'\.\.\..*',"",test)
print(res)
ผลลัพธ์: "นี่คือการทดสอบ"
จากไฟล์:
import re
sep = '...'
with open("requirements.txt") as file_in:
lines = []
for line in file_in:
res = line.split(sep, 1)[0]
print(res)
อีกวิธีที่ง่ายต่อการใช้อีกครั้งจะเป็น
import re, clr
text = 'some string... this part will be removed.'
text= re.search(r'(\A.*)\.\.\..+',url,re.DOTALL|re.IGNORECASE).group(1)
// text = some string