Trong ngôn ngữ lập trình python, để xóa ký tự đầu tiên của xâu a ta viết

Thứ ba, 01/11/2016 | 00:00 GMT+7

Python có một số hàm tích hợp được liên kết với kiểu dữ liệu chuỗi . Các hàm này cho phép ta dễ dàng sửa đổi và thao tác các chuỗi. Ta có thể coi các hàm là các hành động mà ta thực hiện trên các phần tử của mã của ta . Các hàm dựng sẵn là những hàm được định nghĩa bằng ngôn ngữ lập trình Python và có sẵn để ta sử dụng.

Trong hướng dẫn này, ta sẽ xem xét một số hàm khác nhau mà ta có thể sử dụng để làm việc với chuỗi trong Python 3.

Làm dây chữ trên và dưới

Các hàm str.upper() và str.lower() sẽ trả về một chuỗi với tất cả các chữ cái của một chuỗi ban đầu được chuyển đổi thành chữ hoa hoặc chữ thường. Bởi vì chuỗi là kiểu dữ liệu bất biến, chuỗi trả về sẽ là một chuỗi mới. Bất kỳ ký tự nào trong chuỗi không phải là chữ cái sẽ không bị thay đổi.

Hãy chuyển đổi chuỗi Sammy Shark thành tất cả các chữ hoa:

ss = "Sammy Shark" print(ss.upper())

Ouput

SAMMY SHARK

Bây giờ, hãy chuyển đổi chuỗi thành tất cả các chữ thường:

print(ss.lower())

Ouput

sammy shark

Các str.upper() và str.lower() giúp dễ dàng đánh giá và so sánh các chuỗi bằng cách làm cho chữ hoa đồng nhất trong suốt. Bằng cách đó, nếu user viết toàn bộ tên của họ bằng chữ thường, ta vẫn có thể xác định xem tên của họ có trong database của ta hay không bằng cách kiểm tra nó với một version toàn chữ hoa, chẳng hạn.

Phương pháp Boolean

Python có một số phương thức chuỗi sẽ đánh giá thành giá trị Boolean . Ví dụ: những phương pháp này hữu ích khi ta tạo biểu mẫu để user điền vào. Nếu ta đang yêu cầu mã bưu điện, ta sẽ chỉ muốn chấp nhận một chuỗi số, nhưng khi ta hỏi tên, ta sẽ chỉ muốn chấp nhận một chuỗi chữ cái.

Có một số phương thức chuỗi sẽ trả về giá trị Boolean:

phương pháp True nếu
str.isalnum() Chuỗi chỉ bao gồm các ký tự chữ và số (không có ký hiệu)
str.isalpha() Chuỗi chỉ bao gồm các ký tự chữ cái (không có ký hiệu)
str.islower() Các ký tự chữ cái của chuỗi đều là chữ thường
str.isnumeric() Chuỗi chỉ bao gồm các ký tự số
str.isspace() Chuỗi chỉ bao gồm các ký tự khoảng trắng
str.istitle() Chuỗi nằm trong trường hợp tiêu đề
str.isupper() Các ký tự chữ cái của chuỗi đều là chữ hoa

Hãy xem xét một vài trong số này đang hoạt động:

number = "5" letters = "abcdef" print(number.isnumeric()) print(letters.isnumeric())

Output

True False

Sử dụng phương thức str.isnumeric() trên chuỗi 5 trả về giá trị True , trong khi sử dụng phương thức tương tự trên chuỗi abcdef trả về giá trị False .

Tương tự, ta có thể truy vấn xem các ký tự chữ cái của một chuỗi nằm ở dạng chữ hoa tiêu đề, chữ hoa hay chữ thường. Hãy tạo một vài chuỗi:

movie = "2001: A SAMMY ODYSSEY" book = "A Thousand Splendid Sharks" poem = "sammy lived in a pretty how town"

Bây giờ ta hãy thử các phương pháp Boolean để kiểm tra trường hợp:

print(movie.islower()) print(movie.isupper()) print(book.istitle()) print(book.isupper()) print(poem.istitle()) print(poem.islower())

Bây giờ ta có thể chạy các chương trình nhỏ này và xem kết quả:

Output of movie string

False True

Output of book string

True False

Output of poem string

False True

Kiểm tra xem các ký tự là chữ thường, chữ hoa hay chữ hoa tiêu đề, có thể giúp ta sắp xếp dữ liệu của bạn một cách thích hợp, cũng như cung cấp cho ta cơ hội chuẩn hóa dữ liệu ta thu thập bằng cách kiểm tra và sau đó sửa đổi các chuỗi khi cần thiết.

Phương thức chuỗi Boolean rất hữu ích khi ta muốn kiểm tra xem nội dung nào đó mà user nhập vào có phù hợp với các tham số nhất định hay không.

Xác định độ dài chuỗi

Hàm string len() trả về số ký tự trong một chuỗi. Phương pháp này hữu ích khi bạn cần thực thi độ dài password tối thiểu hoặc tối đa, ví dụ, hoặc cắt ngắn các chuỗi lớn hơn nằm trong giới hạn nhất định để sử dụng làm chữ viết tắt.

Để chứng minh phương pháp này, ta sẽ tìm độ dài của một chuỗi dài một câu:

open_source = "Sammy contributes to open source." print(len(open_source))

Output

33

Ta đặt biến open_source bằng chuỗi "Sammy contributes to open source." và sau đó ta chuyển biến đó cho hàm len() với len(open_source) . Sau đó, ta chuyển phương thức vào phương thức print() để ta có thể thấy kết quả kết quả trên màn hình từ chương trình của bạn .

Lưu ý bất kỳ ký tự nào được ràng buộc bởi dấu ngoặc kép đơn hoặc kép - bao gồm chữ cái, số, ký tự khoảng trắng và ký hiệu - sẽ được tính bằng hàm len() .

Các phương thức join (), split () và Replace ()

Các phương thức str.join() , str.split() và str.replace() là một vài cách bổ sung để thao tác chuỗi trong Python.

Phương thức str.join() sẽ nối hai chuỗi, nhưng theo cách chuyển một chuỗi này qua chuỗi khác.

Hãy tạo một chuỗi:

balloon = "Sammy has a balloon."

Bây giờ, hãy sử dụng phương thức str.join() để thêm khoảng trắng vào chuỗi đó, ta có thể làm như vậy:

" ".join(balloon)

Nếu ta in cái này ra:

print(" ".join(balloon))

Ta sẽ thấy rằng trong chuỗi mới được trả về có thêm khoảng trắng trong suốt chuỗi đầu tiên:

Ouput

S a m m y h a s a b a l l o o n .

Ta cũng có thể sử dụng phương thức str.join() để trả về một chuỗi là sự đảo ngược từ chuỗi ban đầu:

print("".join(reversed(balloon)))

Ouput

.noollab a sah ymmaS

Ta không muốn thêm bất kỳ phần nào của chuỗi khác vào chuỗi đầu tiên, vì vậy ta giữ cho dấu ngoặc kép được chạm và không có khoảng cách ở giữa.

Phương thức str.join() cũng hữu ích để kết hợp một danh sách các chuỗi thành một chuỗi đơn mới.

Hãy tạo một chuỗi được phân tách bằng dấu phẩy từ danh sách các chuỗi:

print(",".join(["sharks", "crustaceans", "plankton"]))

Ouput

sharks,crustaceans,plankton

Nếu ta muốn thêm dấu phẩy và khoảng trắng giữa các giá trị chuỗi trong chuỗi mới của bạn , ta có thể chỉ cần viết lại biểu thức của bạn bằng khoảng trắng sau dấu phẩy: ", ".join(["sharks", "crustaceans", "plankton"]) .

Cũng giống như ta có thể nối các chuỗi lại với nhau, ta cũng có thể chia các chuỗi ra. Để làm điều này, ta sẽ sử dụng phương thức str.split() :

print(balloon.split())

Ouput

['Sammy', 'has', 'a', 'balloon.']

Phương thức str.split() trả về danh sách các chuỗi được phân tách bằng khoảng trắng nếu không có tham số nào khác được cung cấp.

Ta cũng có thể sử dụng str.split() để xóa các phần nhất định của chuỗi root . Ví dụ: hãy xóa ký tự a khỏi chuỗi:

print(balloon.split("a"))

Ouput

['S', 'mmy h', 's ', ' b', 'lloon.']

Bây giờ, ký tự a đã bị loại bỏ và các chuỗi đã được tách ra ở vị trí từng version của ký tự a , với khoảng trắng được giữ lại.

Phương thức str.replace() có thể lấy một chuỗi root và trả về một chuỗi đã cập nhật với một số thay thế.

Giả sử rằng quả bóng bay mà Sammy có đã bị mất. Kể từ Sammy không còn bóng này, ta sẽ thay đổi chuỗi "has" từ chuỗi ban đầu balloon để "had" trong một chuỗi mới:

print(balloon.replace("has","had"))

Trong dấu ngoặc đơn, chuỗi con đầu tiên là chuỗi mà ta muốn được thay thế và chuỗi con thứ hai là chuỗi mà ta sẽ thay thế chuỗi con đầu tiên đó. Đầu ra của ta sẽ như thế này:

Ouput

Sammy had a balloon.

Sử dụng các phương thức chuỗi str.join() , str.split() và str.replace() sẽ cung cấp cho bạn khả năng kiểm soát tốt hơn để thao tác các chuỗi trong Python.

Kết luận

Hướng dẫn này đã đi qua một số phương thức tích hợp phổ biến cho kiểu dữ liệu chuỗi mà bạn có thể sử dụng để làm việc và thao tác với chuỗi trong chương trình Python của bạn .

Bạn có thể tìm hiểu thêm về các kiểu dữ liệu khác trong “ Hiểu về kiểu dữ liệu ”, đọc thêm về chuỗi trong “ Giới thiệu về cách làm việc với chuỗi ” và tìm hiểu về cách thay đổi giao diện của chuỗi trong “ Cách định dạng văn bản trong Python 3 ”.

Tags:

Các tin liên quan

Cách làm Toán bằng Python 3 với Toán tử
2016-11-01
Giới thiệu về các hàm chuỗi trong Python 3
2016-11-01
Giới thiệu về các hàm chuỗi trong Python 3
2016-11-01
Cách sử dụng bộ định dạng chuỗi trong Python 3
2016-10-14
Cách xử lý tệp văn bản thuần túy trong Python 3
2016-10-13
Cách sử dụng các biến trong Python 3
2016-10-12
Cách lập chỉ mục và cắt chuỗi trong Python 3
2016-09-28
Cách định dạng văn bản trong Python 3
2016-09-15
Giới thiệu về cách làm việc với chuỗi trong Python 3
2016-09-15
Hiểu các kiểu dữ liệu trong Python 3
2016-09-14 10/15/2010 3:46:21 AM

Nguyễn Xuân Tâm · Nguyễn Xuân Tâm 03:46 15/10/2010

Tôi đang cố xóa các ký tự cụ thể khỏi chuỗi bằng Python. Đây là mã tôi đang sử dụng ngay bây giờ. Thật không may, nó dường như không làm gì với chuỗi.

for char in line:if char in" ?.!/;:": line.replace(char,'')

Làm thế nào để tôi làm điều này đúng?

422 hữu ích 5 bình luận 1.0m xem chia sẻ

answer

Hoàng Trà Giang · Hoàng Trà Giang 03:50 15/10/2010

Chuỗi trong Python là bất biến (không thể thay đổi). Bởi vì điều này, hiệu quả của line.replace(...)chỉ là tạo ra một chuỗi mới, thay vì thay đổi chuỗi cũ. Bạn cần rebind (gán) nó để linebiến đó lấy giá trị mới, với các ký tự đó bị xóa.

Ngoài ra, cách bạn đang làm nó sẽ là loại chậm, tương đối. Nó cũng có thể hơi khó hiểu với những con trăn có kinh nghiệm, những người sẽ nhìn thấy một cấu trúc gấp đôi và nghĩ trong giây lát rằng một cái gì đó phức tạp hơn đang diễn ra.

Bắt đầu trong Python 2.6 và các phiên bản Python 2.x mới hơn *, thay vào đó, bạn có thể sử dụng str.translate(nhưng đọc về sự khác biệt của Python 3):

line = line.translate(None,'[email protected]#$')

hoặc thay thế biểu thức chính quy bằng re.sub

import re line = re.sub('[[email protected]#$]','', line)

Các ký tự được đặt trong ngoặc tạo thành một lớp ký tự . Bất kỳ ký tự linenào trong lớp đó được thay thế bằng tham số thứ hai thành sub: một chuỗi rỗng.

Trong Python 3, chuỗi là Unicode. Bạn sẽ phải dịch một chút khác nhau. kevpie đề cập đến điều này trong một bình luận về một trong những câu trả lời, và nó được ghi chú trong tài liệu chostr.translate .

Khi gọi translatephương thức của chuỗi Unicode, bạn không thể truyền tham số thứ hai mà chúng ta đã sử dụng ở trên. Bạn cũng không thể vượt qua Nonenhư tham số đầu tiên, hoặc thậm chí là bảng dịch từ đó string.maketrans. Thay vào đó, bạn vượt qua một từ điển như là tham số duy nhất. Từ điển này ánh xạ các giá trị thứ tự của các ký tự (nghĩa là kết quả của việc gọi ordchúng) đến các giá trị thứ tự của các ký tự sẽ thay thế chúng, hoặc một cách hữu ích cho chúng tôi Noneđể xóa chúng.

Vì vậy, để thực hiện điệu nhảy trên với một chuỗi Unicode, bạn sẽ gọi một cái gì đó như

translation_table = dict.fromkeys(map(ord, '[email protected]#$'),None) unicode_line = unicode_line.translate(translation_table)

Ở đây dict.fromkeysvà mapđược sử dụng để tạo ra một từ điển ngắn gọn chứa

{ord('!'): None, ord('@'):None,...}

Thậm chí đơn giản hơn, như một câu trả lời khác đặt nó , tạo từ điển tại chỗ:

unicode_line = unicode_line.translate({ord(c):Nonefor c in'[email protected]#$'})

* để tương thích với các Pythons trước đó, bạn có thể tạo bảng dịch "null" để thay thế None:

import string line = line.translate(string.maketrans('',''),'[email protected]#$')

Ở đây string.maketransđược sử dụng để tạo bảng dịch , đây chỉ là một chuỗi chứa các ký tự có giá trị thứ tự từ 0 đến 255.

538 hữu ích 5 bình luận chia sẻ

answer

Hoàng Bích Vân · Hoàng Bích Vân 12:11 15/10/2010

Tôi có thiếu điểm ở đây không, hay chỉ là như sau:

>>> string ="ab1cd1ef">>> string.replace("1","")'abcdef'>>>

Đặt nó trong một vòng lặp:

>>>>>> a = "[email protected]#d$">>> b ="[email protected]#$">>>for char in b:... a = a.replace(char,"")...>>>print a abcd >>>

183 hữu ích 2 bình luận chia sẻ

answer

Hoàng Hữu Khoát · Hoàng Hữu Khoát 04:18 15/10/2010

>>> line ="abc#@!?efg12;:?">>>''.join( c for c in line if c notin'?:!/;')'abc#@efg12'

37 hữu ích 3 bình luận chia sẻ

answer

Hoàng Hải Châu · Hoàng Hải Châu 21:23 25/09/2017

re.sub('\ |\?|\.|\!|\/|\;|\:','', line)>>> import re >>> line ='Q: Do I write ;/.??? No!!!'>>> re.sub('\ |\?|\.|\!|\/|\;|\:','', line)'QDoIwriteNo'

Trong các biểu thức chính quy (regex), |là một OR logic và \thoát khỏi khoảng trắng và các ký tự đặc biệt có thể là các lệnh regex thực tế. sublà viết tắt của sự thay thế.

21 hữu ích 0 bình luận chia sẻ

answer

Đỗ Thụy Vân · Đỗ Thụy Vân 18:03 14/12/2011

Người hỏi gần như đã có nó. Giống như hầu hết mọi thứ trong Python, câu trả lời đơn giản hơn bạn nghĩ.

>>> line ="H E?.LL!/;O:: ">>>for char in' ?.!/;:':... line = line.replace(char,'')...>>>print line HELLO

Bạn không phải thực hiện điều lặp if / for lồng nhau, nhưng bạn cần kiểm tra từng ký tự riêng lẻ.

18 hữu ích 3 bình luận chia sẻ

answer

Phạm Chấn Phong · Phạm Chấn Phong 22:39 25/01/2014

Đối với yêu cầu nghịch đảo chỉ cho phép một số ký tự nhất định trong chuỗi, bạn có thể sử dụng các biểu thức chính quy với toán tử bổ sung đã đặt [^ABCabc]. Ví dụ: để xóa mọi thứ trừ chữ ascii, chữ số và dấu gạch nối:

>>>import string >>>import re >>>>>> phrase =' There were "nine" (9) chick-peas in my pocket!!! '>>> allow = string.letters + string.digits +'-'>>> re.sub('[^%s]'% allow,'', phrase)'Therewerenine9chick-peasinmypocket'

Từ tài liệu biểu thức chính quy python :

Các ký tự không nằm trong phạm vi có thể được khớp bằng cách bổ sung cho tập hợp. Nếu ký tự đầu tiên của bộ là '^', tất cả các ký tự không có trong bộ sẽ được khớp. Ví dụ: [^5]sẽ khớp với bất kỳ ký tự nào ngoại trừ '5' và [^^]sẽ khớp với bất kỳ ký tự nào ngoại trừ '^'. ^không có ý nghĩa đặc biệt nếu đó không phải là nhân vật đầu tiên trong bộ.

18 hữu ích 1 bình luận chia sẻ

answer

Tạ Tú Quyên · Tạ Tú Quyên 03:59 15/10/2010

line = line.translate(None," ?.!/;:")

14 hữu ích 2 bình luận chia sẻ

answer

Nguyễn Huy Hùng · Nguyễn Huy Hùng 08:24 08/10/2015

>>> s ='a1b2c3' >>>''.join(c for c in s if c notin'123')'abc'

10 hữu ích 1 bình luận chia sẻ

answer

Bùi Bằng Phi · Bùi Bằng Phi 03:50 15/10/2010

Chuỗi là bất biến trong Python. Các replacephương thức trả về một chuỗi mới sau khi thay thế. Thử:

for char in line: if char in" ?.!/;:": line = line.replace(char,'')

7 hữu ích 3 bình luận chia sẻ

answer

Dương Minh Khôi · Dương Minh Khôi 10:44 25/10/2017

Sử dụng filter, bạn chỉ cần một dòng

line = filter(lambda char: char not in" ?.!/;:", line)

Điều này coi chuỗi là một lần lặp và kiểm tra mọi ký tự nếu lambdatrả về True:

>>> help(filter)Help on built-in function filter in module __builtin__: filter(...) filter(function orNone, sequence)-> list, tuple,or string Return those items of sequence for which function(item) is true.If function isNone,return the items that are true.If sequence is a tuple or string,return the same type,else return a list.

6 hữu ích 0 bình luận chia sẻ

answer

Trịnh Việt Khuê · Trịnh Việt Khuê 06:49 01/01/2017

Tôi đã rất ngạc nhiên khi chưa có ai khuyến nghị sử dụng chức năng lọc dựng sẵn .

import operator import string # only for the example you could use a custom string s ="1212edjaq"

Nói rằng chúng tôi muốn lọc ra tất cả mọi thứ không phải là một số. Sử dụng phương thức dựng sẵn bộ lọc "... tương đương với biểu thức trình tạo (mục cho mục trong iterable if function (item))" [ Python 3 Buildins: Filter ]

sList = list(s) intsList = list(string.digits) obj = filter(lambda x: operator.contains(intsList, x), sList)))

Trong Python 3, nó trả về

>><filter object @ hex>

Để có được một chuỗi in,

nums = "".join(list(obj))print(nums)>>"1212"

Tôi không chắc chắn làm thế nào bộ lọc xếp hạng về hiệu quả nhưng nó là một điều tốt để biết làm thế nào để sử dụng khi làm việc hiểu danh sách và như vậy.

CẬP NHẬT

Về mặt logic, vì bộ lọc hoạt động, bạn cũng có thể sử dụng khả năng hiểu danh sách và từ những gì tôi đã đọc, nó được cho là hiệu quả hơn vì lambdas là nhà quản lý quỹ phòng hộ trên phố của thế giới chức năng lập trình. Một điểm cộng nữa là nó là một lớp lót không yêu cầu nhập khẩu. Ví dụ: sử dụng cùng một chuỗi 's' được xác định ở trên,

num ="".join([i for i in s if i.isdigit()])

Đó là nó. Trả về sẽ là một chuỗi gồm tất cả các ký tự là các chữ số trong chuỗi gốc.

Nếu bạn có một danh sách cụ thể các ký tự được chấp nhận / không thể chấp nhận, bạn chỉ cần điều chỉnh phần 'nếu' trong phần hiểu danh sách.

target_chars ="".join([i for i in s if i in some_list])

Hay cách khác,

target_chars ="".join([i for i in s if i notin some_list])

5 hữu ích 1 bình luận chia sẻ

answer

Hoàng Thiện Giang · Hoàng Thiện Giang 16:07 03/08/2016

Đây là phiên bản tương thích Python 2/3 của tôi. Kể từ khi dịch api đã thay đổi.

def remove(str_, chars):"""Removes each char in `chars` from `str_`. Args: str_: String to remove characters from chars: String of to-be removed characters Returns: A copy of str_ with `chars` removed Example: remove("What?!?: darn;", " ?.!:;") => 'Whatdarn' """try:# Python2.xreturn str_.translate(None, chars)exceptTypeError:# Python 3.x table ={ord(char):Nonefor char in chars} return str_.translate(table)

3 hữu ích 3 bình luận chia sẻ

answer

Lý Hương Thu · Lý Hương Thu 08:06 31/10/2017

>>># Character stripping>>> a ='?abcd1234!!'>>> t.lstrip('?')'abcd1234!!'>>> t.strip('?!')'abcd1234'

3 hữu ích 1 bình luận chia sẻ

answer

Trịnh Tuấn Hùng · Trịnh Tuấn Hùng 13:04 22/07/2018

Dưới đây là một số cách có thể để đạt được nhiệm vụ này:

def attempt1(string):return"".join([v for v in string if v notin ("a","e","i","o","u")])def attempt2(string):for v in("a","e", "i","o","u"): string = string.replace(v,"")return string def attempt3(string):import re for v in("a","e","i","o","u"): string = re.sub(v,"", string) return string def attempt4(string):return string.replace("a","").replace("e","").replace("i", "").replace("o","").replace("u","")for attempt in[attempt1, attempt2, attempt3, attempt4]: print(attempt("murcielago"))

PS: Thay vì sử dụng "?! /;

PS2: Nếu bạn quan tâm đến hiệu suất, bạn có thể đo những lần thử này bằng một mã đơn giản như:

import timeit K =1000000for i in range(1,5): t = timeit.Timer( f"attempt{i}('murcielago')", setup=f"from __main__ import attempt{i}").repeat(1, K)print(f"attempt{i}",min(t))

Trong hộp của tôi, bạn sẽ nhận được:

attempt1 2.2334518376057244 attempt2 1.8806643818474513 attempt3 7.214925774955572 attempt4 1.7271184513757465

Vì vậy, có vẻ như nỗ lực4 là cách nhanh nhất cho đầu vào cụ thể này.

3 hữu ích 4 bình luận chia sẻ

answer

Dương Huệ Ân · Dương Huệ Ân 09:34 25/05/2014

#!/usr/bin/pythonimport re strs ="how^ much for{} the maple syrup? $20.99? That's[] ricidulous!!!" print strs nstr = re.sub(r'[?|$|.|!|a|b]',r' ',strs)#i have taken special character to remove but any #character can be added hereprint nstr nestr = re.sub(r'[^a-zA-Z0-9 ]',r'',nstr)#for removing special character print nestr

1 hữu ích 2 bình luận chia sẻ

answer

Hoàng Ngọc Nhiên · Hoàng Ngọc Nhiên 07:53 24/03/2015

Còn cái này thì sao:

def text_cleanup(text): new ="" for i in text:if i notin" ?.!/;:": new += i return new

1 hữu ích 2 bình luận chia sẻ

answer

Phạm Uyển Nhã · Phạm Uyển Nhã 06:36 11/08/2015

Bạn cũng có thể sử dụng một hàm để thay thế loại biểu thức chính quy hoặc mẫu khác bằng việc sử dụng danh sách. Cùng với đó, bạn có thể trộn biểu thức chính quy, lớp ký tự và mẫu văn bản thực sự cơ bản. Nó thực sự hữu ích khi bạn cần thay thế nhiều yếu tố như HTML.

* NB: hoạt động với Python 3.x

import re # Regular expression librarydef string_cleanup(x, notwanted):for item in notwanted: x = re.sub(item,'', x)return x line ="My example: <strong>A text %very% $clean!!</strong>"print("Uncleaned: ", line)# Get rid of html elements html_elements =[""</span><span>,</span><span></span><span>"","",""] line = string_cleanup(line, html_elements)print("1st clean: ", line)# Get rid of special characters special_chars =["[[email protected]#$]","%"] line = string_cleanup(line, special_chars)print("2nd clean: ", line)

Trong hàm string_cleanup, nó lấy chuỗi x của bạn và danh sách của bạn không được chú ý làm đối số. Đối với mỗi mục trong danh sách các yếu tố hoặc mẫu đó, nếu cần thay thế, nó sẽ được thực hiện.

Đầu ra:

Uncleaned:<title>My example:<strong>A text %very% $clean!!strong>title>1st clean:My example: A text %very% $clean!!2nd clean:My example: A text very clean

1 hữu ích 0 bình luận chia sẻ

answer

Lý Diễm Hạnh · Lý Diễm Hạnh 19:30 10/06/2016

Phương pháp của tôi tôi có thể sử dụng có thể sẽ không hoạt động hiệu quả, nhưng nó rất đơn giản. Tôi có thể xóa nhiều ký tự ở các vị trí khác nhau cùng một lúc, sử dụng cắt và định dạng. Đây là một ví dụ:

words ="things" removed ="%s%s"%(words[:3], words[-1:])

Điều này sẽ dẫn đến 'loại bỏ' giữ từ 'này'.

Định dạng có thể rất hữu ích để in các biến giữa chừng trong một chuỗi in. Nó có thể chèn bất kỳ loại dữ liệu nào bằng cách sử dụng % theo sau là kiểu dữ liệu của biến; tất cả các loại dữ liệu có thể sử dụng % s và float (hay còn gọi là số thập phân) và số nguyên có thể sử dụng % d .

Cắt lát có thể được sử dụng để kiểm soát phức tạp trên chuỗi. Khi tôi đặt các từ [: 3] , nó cho phép tôi chọn tất cả các ký tự trong chuỗi từ đầu (dấu hai chấm đứng trước số, điều này có nghĩa là 'từ đầu đến') đến ký tự thứ 4 (bao gồm cả ký tự thứ 4 tính cách). Lý do 3 bằng với vị trí thứ 4 là do Python bắt đầu từ 0. Sau đó, khi tôi đặt từ [-1:] , nó có nghĩa là ký tự cuối cùng thứ 2 ở cuối (dấu hai chấm đứng sau số). Đặt -1 sẽ làm cho Python đếm từ ký tự cuối cùng, thay vì đầu tiên. Một lần nữa, Python sẽ bắt đầu từ 0. Vì vậy, từ [-1:] về cơ bản có nghĩa là 'từ ký tự cuối cùng thứ hai đến cuối chuỗi.

Vì vậy, bằng cách cắt bỏ các ký tự trước ký tự tôi muốn loại bỏ và các ký tự sau và kẹp chúng lại với nhau, tôi có thể loại bỏ các ký tự không mong muốn. Hãy nghĩ về nó như một cái xúc xích. Ở giữa nó bẩn, vì vậy tôi muốn thoát khỏi nó. Tôi chỉ đơn giản là cắt hai đầu mà tôi muốn sau đó đặt chúng lại với nhau mà không có phần không mong muốn ở giữa.

Nếu tôi muốn xóa nhiều ký tự liên tiếp, tôi chỉ cần thay đổi các số xung quanh trong [] (phần cắt). Hoặc nếu tôi muốn xóa nhiều ký tự khỏi các vị trí khác nhau, tôi có thể chỉ cần kẹp nhiều lát cùng một lúc.

Ví dụ:

words ="control" removed ="%s%s"%(words[:2], words[-2:])

loại bỏ bằng 'mát mẻ'.

words ="impacts" removed ="%s%s%s" %(words[1], words[3:5], words[-1])

loại bỏ bằng 'mac'.

Trong trường hợp này, [3: 5] có nghĩa là nhân vật ở vị trí 3 thông qua nhân vật ở vị trí 5 (không bao gồm nhân vật ở vị trí cuối cùng).

Hãy nhớ rằng, Python bắt đầu đếm từ 0 , vì vậy bạn cũng sẽ cần.

1 hữu ích 0 bình luận chia sẻ

answer

Lê Mỹ Trang · Lê Mỹ Trang 10:28 13/07/2018

Bạn phải gán lại biến str của bạn:

for char in line:if char in" ?.!/;:": line = line.replace(char,'')

1 hữu ích 0 bình luận chia sẻ

answer

Dưới đây một .. với ra bằng cách sử dụng khái niệm biểu thức chính quy ..

ipstring ="text with [email protected]#$^&*( ends here" opstring=''for i in ipstring:if i.isalnum()==1or i==' ': opstring+=i passprint opstring

0 hữu ích 0 bình luận chia sẻ

answer

Phan Ðình Phúc · Phan Ðình Phúc 01:25 07/01/2017

ví dụ,

os.rename(file_name, file_name.translate({ord(c):Nonefor c in'0123456789'}))

Để xóa tất cả số khỏi chuỗi

0 hữu ích 0 bình luận chia sẻ

answer

Vũ Minh Hỷ · Vũ Minh Hỷ 02:07 17/02/2017

bạn có thể sử dụng bộ

charlist = list(set(string.digits+string.ascii_uppercase)- set('10IO'))return ''.join([random.SystemRandom().choice(charlist)for _ in range(passlen)])

0 hữu ích 1 bình luận chia sẻ

answer

Phạm Hàm Thơ · Phạm Hàm Thơ 08:01 31/10/2017

Hãy thử cái này:

def rm_char(original_str, need2rm):''' Remove charecters in "need2rm" from "original_str" '''return original_str.translate(str.maketrans('','',need2rm))

Phương pháp này hoạt động tốt trong python 3.5.2

0 hữu ích 0 bình luận chia sẻ

answer

Tạ Nhất Khôi · Tạ Nhất Khôi 14:16 13/01/2018

Tách đệ quy: s = chuỗi; ký tự = ký tự để loại bỏ

def strip(s,chars):if len(s)==1:return""if s in chars else s return strip(s[0:int(len(s)/2)],chars)+ strip(s[int(len(s)/2):len(s)],chars)

thí dụ:

print(strip("Hello!","lo"))#He!

0 hữu ích 0 bình luận chia sẻ

answer

Lê Xuân Hàm · Lê Xuân Hàm 18:51 23/01/2017

Ngay cả cách tiếp cận dưới đây cũng hoạt động

line ="a,b,c,d,e" alpha = list(line)while','in alpha: alpha.remove(',') finalString =''.join(alpha) print(finalString)

đầu ra >> abcde

0 hữu ích 0 bình luận chia sẻ

Xem nguồn: https://stackoverflow.com//questions/3939361/remove-specific-characters-from-a-string-in-python