Tôi có một chuỗi. Làm cách nào để xóa tất cả văn bản sau một ký tự nhất định? ( Trong trường hợp này...
)
Văn bản sau sẽ ...
thay đổi vì vậy tôi là lý do tại sao tôi muốn xóa tất cả các ký tự sau một ký tự nhất định.
Tôi có một chuỗi. Làm cách nào để xóa tất cả văn bản sau một ký tự nhất định? ( Trong trường hợp này...
)
Văn bản sau sẽ ...
thay đổi vì vậy tôi là lý do tại sao tôi muốn xóa tất cả các ký tự sau một ký tự nhất định.
Câu trả lời:
Tách trên dải phân cách của bạn nhiều nhất một lần và lấy mảnh đầu tiên:
sep = '...'
rest = text.split(sep, 1)[0]
Bạn đã không nói điều gì sẽ xảy ra nếu dải phân cách không có mặt. Cả giải pháp này và Alex sẽ trả lại toàn bộ chuỗi trong trường hợp đó.
Giả sử dấu phân cách của bạn là '...', nhưng nó có thể là bất kỳ chuỗi nào.
text = 'some string... this part will be removed.'
head, sep, tail = text.partition('...')
>>> print head
some string
Nếu không tìm thấy dấu phân cách, head
sẽ chứa tất cả các chuỗi gốc.
Hàm phân vùng đã được thêm vào trong Python 2.5.
phân vùng (...) S.partition (sep) -> (đầu, sep, đuôi)
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.
Nếu bạn muốn xóa mọi thứ sau lần phân tách cuối cùng trong chuỗi, tôi thấy điều này hoạt động tốt:
<separator>.join(string_to_split.split(<separator>)[:-1])
Ví dụ: nếu string_to_split
là một đường dẫn giống như root/location/child/too_far.exe
và bạn chỉ muốn đường dẫn thư mục, bạn có thể tách ra "/".join(string_to_split.split("/")[:-1])
và bạn sẽ nhận được
root/location/child
Không có RE (mà tôi giả sử là những gì bạn muốn):
def remafterellipsis(text):
where_ellipsis = text.find('...')
if where_ellipsis == -1:
return text
return text[:where_ellipsis + 3]
hoặc, với RE:
import re
def remwithre(text, there=re.compile(re.escape('...')+'.*')):
return there.sub('', text)
Phương thức find sẽ trả về vị trí ký tự trong một chuỗi. Sau đó, nếu bạn muốn loại bỏ mọi thứ khỏi nhân vật, hãy làm điều này:
mystring = "123⋯567"
mystring[ 0 : mystring.index("⋯")]
>> '123'
Nếu bạn muốn giữ nhân vật, thêm 1 vào vị trí nhân vật.
import re
test = "This is a test...we should not be able to see this"
res = re.sub(r'\.\.\..*',"",test)
print(res)
Đầu ra: "Đây là một thử nghiệm"
Từ một tập tin:
import re
sep = '...'
with open("requirements.txt") as file_in:
lines = []
for line in file_in:
res = line.split(sep, 1)[0]
print(res)