Hướng dẫn remove non digits from string python - xóa các chữ số không phải từ chuỗi python

Trong Python 2.*, cho đến nay, cách tiếp cận nhanh nhất là phương pháp

$ python -mtimeit -s'import string; all=string.maketrans("", ""); nodig=all.translate(all, string.digits); x="aaa12333bb445bb54b5b52"' 'x.translate(all, nodig)'
1000000 loops, best of 3: 1.04 usec per loop
$ python -mtimeit -s'import re;  x="aaa12333bb445bb54b5b52"' 're.sub(r"\D", "", x)'
100000 loops, best of 3: 7.9 usec per loop
2:

>>> x='aaa12333bb445bb54b5b52'
>>> import string
>>> all=string.maketrans('','')
>>> nodigs=all.translate(all, string.digits)
>>> x.translate(all, nodigs)
'1233344554552'
>>> 

$ python -mtimeit -s'import string; all=string.maketrans("", ""); nodig=all.translate(all, string.digits); x="aaa12333bb445bb54b5b52"' 'x.translate(all, nodig)'
1000000 loops, best of 3: 1.04 usec per loop
$ python -mtimeit -s'import re;  x="aaa12333bb445bb54b5b52"' 're.sub(r"\D", "", x)'
100000 loops, best of 3: 7.9 usec per loop
3 tạo ra một bảng dịch (một chuỗi có độ dài 256) trong trường hợp này giống như
$ python -mtimeit -s'import string; all=string.maketrans("", ""); nodig=all.translate(all, string.digits); x="aaa12333bb445bb54b5b52"' 'x.translate(all, nodig)'
1000000 loops, best of 3: 1.04 usec per loop
$ python -mtimeit -s'import re;  x="aaa12333bb445bb54b5b52"' 're.sub(r"\D", "", x)'
100000 loops, best of 3: 7.9 usec per loop
4 (chỉ nhanh hơn để thực hiện ;-).
$ python -mtimeit -s'import string; all=string.maketrans("", ""); nodig=all.translate(all, string.digits); x="aaa12333bb445bb54b5b52"' 'x.translate(all, nodig)'
1000000 loops, best of 3: 1.04 usec per loop
$ python -mtimeit -s'import re;  x="aaa12333bb445bb54b5b52"' 're.sub(r"\D", "", x)'
100000 loops, best of 3: 7.9 usec per loop
2 áp dụng bảng dịch (ở đây không liên quan vì
$ python -mtimeit -s'import string; all=string.maketrans("", ""); nodig=all.translate(all, string.digits); x="aaa12333bb445bb54b5b52"' 'x.translate(all, nodig)'
1000000 loops, best of 3: 1.04 usec per loop
$ python -mtimeit -s'import re;  x="aaa12333bb445bb54b5b52"' 're.sub(r"\D", "", x)'
100000 loops, best of 3: 7.9 usec per loop
6 về cơ bản có nghĩa là danh tính) và xóa các ký tự có trong đối số thứ hai - phần chính.

$ python -mtimeit -s'import string; all=string.maketrans("", ""); nodig=all.translate(all, string.digits); x="aaa12333bb445bb54b5b52"' 'x.translate(all, nodig)'
1000000 loops, best of 3: 1.04 usec per loop
$ python -mtimeit -s'import re;  x="aaa12333bb445bb54b5b52"' 're.sub(r"\D", "", x)'
100000 loops, best of 3: 7.9 usec per loop
2 hoạt động rất khác nhau trên các chuỗi Unicode (và các chuỗi trong Python 3-Tôi mong muốn những câu hỏi được chỉ định là giải phóng chính của Python là điều đáng quan tâm!)-không hoàn toàn đơn giản, không hoàn toàn nhanh như vậy, mặc dù vẫn có thể sử dụng được.do wish questions specified which major-release of Python is of interest!) -- not quite this simple, not quite this fast, though still quite usable.

Quay lại 2.*, chênh lệch hiệu suất rất ấn tượng ...:

$ python -mtimeit -s'import string; all=string.maketrans("", ""); nodig=all.translate(all, string.digits); x="aaa12333bb445bb54b5b52"' 'x.translate(all, nodig)'
1000000 loops, best of 3: 1.04 usec per loop
$ python -mtimeit -s'import re;  x="aaa12333bb445bb54b5b52"' 're.sub(r"\D", "", x)'
100000 loops, best of 3: 7.9 usec per loop

Tăng tốc mọi thứ tăng 7-8 lần hầu như không phải là đậu phộng, vì vậy phương pháp

$ python -mtimeit -s'import string; all=string.maketrans("", ""); nodig=all.translate(all, string.digits); x="aaa12333bb445bb54b5b52"' 'x.translate(all, nodig)'
1000000 loops, best of 3: 1.04 usec per loop
$ python -mtimeit -s'import re;  x="aaa12333bb445bb54b5b52"' 're.sub(r"\D", "", x)'
100000 loops, best of 3: 7.9 usec per loop
8 rất đáng để biết và sử dụng. Cách tiếp cận không phổ biến khác ...:

$ python -mtimeit -s'x="aaa12333bb445bb54b5b52"' '"".join(i for i in x if i.isdigit())'
100000 loops, best of 3: 11.5 usec per loop

chậm hơn 50% so với RE, vì vậy phương pháp

$ python -mtimeit -s'import string; all=string.maketrans("", ""); nodig=all.translate(all, string.digits); x="aaa12333bb445bb54b5b52"' 'x.translate(all, nodig)'
1000000 loops, best of 3: 1.04 usec per loop
$ python -mtimeit -s'import re;  x="aaa12333bb445bb54b5b52"' 're.sub(r"\D", "", x)'
100000 loops, best of 3: 7.9 usec per loop
2 đánh bại nó theo một thứ tự cường độ.

Trong Python 3, hoặc cho Unicode, bạn cần phải vượt qua

$ python -mtimeit -s'import string; all=string.maketrans("", ""); nodig=all.translate(all, string.digits); x="aaa12333bb445bb54b5b52"' 'x.translate(all, nodig)'
1000000 loops, best of 3: 1.04 usec per loop
$ python -mtimeit -s'import re;  x="aaa12333bb445bb54b5b52"' 're.sub(r"\D", "", x)'
100000 loops, best of 3: 7.9 usec per loop
2 một ánh xạ (với các thứ tự, không phải các ký tự trực tiếp, làm khóa) trả về
$ python -mtimeit -s'x="aaa12333bb445bb54b5b52"' '"".join(i for i in x if i.isdigit())'
100000 loops, best of 3: 11.5 usec per loop
1 cho những gì bạn muốn xóa. Đây là một cách thuận tiện để thể hiện điều này để xóa "mọi thứ nhưng" một vài ký tự:

import string

class Del:
  def __init__(self, keep=string.digits):
    self.comp = dict((ord(c),c) for c in keep)
  def __getitem__(self, k):
    return self.comp.get(k)

DD = Del()

x='aaa12333bb445bb54b5b52'
x.translate(DD)

Cũng phát ra

$ python -mtimeit -s'x="aaa12333bb445bb54b5b52"' '"".join(i for i in x if i.isdigit())'
100000 loops, best of 3: 11.5 usec per loop
2. Tuy nhiên, đặt cái này vào xx.py mà chúng ta có ...:

$ python3.1 -mtimeit -s'import re;  x="aaa12333bb445bb54b5b52"' 're.sub(r"\D", "", x)'
100000 loops, best of 3: 8.43 usec per loop
$ python3.1 -mtimeit -s'import xx; x="aaa12333bb445bb54b5b52"' 'x.translate(xx.DD)'
10000 loops, best of 3: 24.3 usec per loop

... Điều này cho thấy lợi thế hiệu suất biến mất, đối với loại nhiệm vụ "xóa" này và trở thành giảm hiệu suất.

Xóa tất cả các ký tự không phải là số từ một chuỗi trong Python #

Sử dụng phương thức

$ python -mtimeit -s'x="aaa12333bb445bb54b5b52"' '"".join(i for i in x if i.isdigit())'
100000 loops, best of 3: 11.5 usec per loop
3 để xóa tất cả các ký tự không phải là số từ chuỗi, ví dụ:
$ python -mtimeit -s'x="aaa12333bb445bb54b5b52"' '"".join(i for i in x if i.isdigit())'
100000 loops, best of 3: 11.5 usec per loop
4. Phương pháp
$ python -mtimeit -s'x="aaa12333bb445bb54b5b52"' '"".join(i for i in x if i.isdigit())'
100000 loops, best of 3: 11.5 usec per loop
3 sẽ loại bỏ tất cả các ký tự không phải là số ra khỏi chuỗi bằng cách thay thế chúng bằng các chuỗi trống.

Copied!

import re my_str = 'a1s2d3f4g5' result = re.sub(r'[^0-9]', '', my_str) print(result) # 👉️ '12345'

Nếu bạn đang tìm cách tránh sử dụng các biểu thức thông thường, hãy cuộn xuống tiêu đề tiếp theo.

Chúng tôi đã sử dụng phương thức

$ python -mtimeit -s'x="aaa12333bb445bb54b5b52"' '"".join(i for i in x if i.isdigit())'
100000 loops, best of 3: 11.5 usec per loop
3 để xóa tất cả các ký tự không phải là số từ một chuỗi.

Phương thức Re.sub trả về một chuỗi mới thu được bằng cách thay thế các lần xuất hiện của mẫu bằng thay thế được cung cấp.

Copied!

import re my_str = '1apple, 2apple, 3banana' result = re.sub(r'[^0-9]', '', my_str) print(result) # 👉️ 123

Nếu mẫu không được tìm thấy, chuỗi được trả về như vậy.

Đối số đầu tiên chúng tôi đã chuyển sang phương pháp

$ python -mtimeit -s'x="aaa12333bb445bb54b5b52"' '"".join(i for i in x if i.isdigit())'
100000 loops, best of 3: 11.5 usec per loop
3 là một biểu thức chính quy.

Các dấu ngoặc vuông

$ python -mtimeit -s'x="aaa12333bb445bb54b5b52"' '"".join(i for i in x if i.isdigit())'
100000 loops, best of 3: 11.5 usec per loop
8 được sử dụng để chỉ ra một tập hợp các ký tự.

Nếu ký tự đầu tiên của bộ là CARET

$ python -mtimeit -s'x="aaa12333bb445bb54b5b52"' '"".join(i for i in x if i.isdigit())'
100000 loops, best of 3: 11.5 usec per loop
9, tất cả các ký tự không có trong bộ sẽ được khớp.

Nói cách khác, tập hợp của chúng tôi phù hợp với bất kỳ ký tự nào không phải là một chữ số trong phạm vi

import string

class Del:
  def __init__(self, keep=string.digits):
    self.comp = dict((ord(c),c) for c in keep)
  def __getitem__(self, k):
    return self.comp.get(k)

DD = Del()

x='aaa12333bb445bb54b5b52'
x.translate(DD)
0.

Đối số thứ hai chúng tôi đã chuyển sang phương pháp

$ python -mtimeit -s'x="aaa12333bb445bb54b5b52"' '"".join(i for i in x if i.isdigit())'
100000 loops, best of 3: 11.5 usec per loop
3 là sự thay thế cho mỗi trận đấu.

Copied!

import re my_str = 'a1s2d3f4g5' result = re.sub(r'[^0-9]', '', my_str) print(result) # 👉️ '12345'

Chúng tôi muốn loại bỏ tất cả các ký tự không phải là số, vì vậy chúng tôi thay thế từng ký tự bằng một chuỗi trống.

Ngoài ra còn có một tốc ký cho bộ nhân vật

import string

class Del:
  def __init__(self, keep=string.digits):
    self.comp = dict((ord(c),c) for c in keep)
  def __getitem__(self, k):
    return self.comp.get(k)

DD = Del()

x='aaa12333bb445bb54b5b52'
x.translate(DD)
2.

Copied!

import re my_str = 'a1s2d3f4g5' result = re.sub(r'\D', '', my_str) print(result) # 👉️ '12345'

Nhân vật đặc biệt

import string

class Del:
  def __init__(self, keep=string.digits):
    self.comp = dict((ord(c),c) for c in keep)
  def __getitem__(self, k):
    return self.comp.get(k)

DD = Del()

x='aaa12333bb445bb54b5b52'
x.translate(DD)
3 phù hợp với bất kỳ ký tự nào không phải là một chữ số. Nó rất giống với bộ ký tự
import string

class Del:
  def __init__(self, keep=string.digits):
    self.comp = dict((ord(c),c) for c in keep)
  def __getitem__(self, k):
    return self.comp.get(k)

DD = Del()

x='aaa12333bb445bb54b5b52'
x.translate(DD)
2 nhưng bao gồm nhiều ký tự chữ số hơn.

Xóa tất cả các ký tự không phải là số ra khỏi chuỗi bằng cách sử dụng tham gia () #

Để xóa tất cả các ký tự không phải là số từ một chuỗi:

  1. Sử dụng biểu thức máy phát để lặp qua chuỗi.
  2. Sử dụng ký tự
    import string
    
    class Del:
      def __init__(self, keep=string.digits):
        self.comp = dict((ord(c),c) for c in keep)
      def __getitem__(self, k):
        return self.comp.get(k)
    
    DD = Del()
    
    x='aaa12333bb445bb54b5b52'
    x.translate(DD)
    
    5 để kiểm tra xem mỗi ký tự là một chữ số.
  3. Sử dụng phương thức
    import string
    
    class Del:
      def __init__(self, keep=string.digits):
        self.comp = dict((ord(c),c) for c in keep)
      def __getitem__(self, k):
        return self.comp.get(k)
    
    DD = Del()
    
    x='aaa12333bb445bb54b5b52'
    x.translate(DD)
    
    6 để tham gia các chữ số vào một chuỗi.

Copied!

my_str = 'a1s2d3f4g5' result = ''.join(char for char in my_str if char.isdigit()) print(result) # 👉️ '12345'

Chúng tôi đã sử dụng một biểu thức máy phát để lặp qua chuỗi.

Biểu thức của máy phát được sử dụng để thực hiện một số hoạt động cho mọi phần tử hoặc chọn một tập hợp con của các phần tử đáp ứng một điều kiện.

Trên mỗi lần lặp, chúng tôi sử dụng phương thức

import string

class Del:
  def __init__(self, keep=string.digits):
    self.comp = dict((ord(c),c) for c in keep)
  def __getitem__(self, k):
    return self.comp.get(k)

DD = Del()

x='aaa12333bb445bb54b5b52'
x.translate(DD)
5 để kiểm tra xem ký tự hiện tại có phải là chữ số và trả về kết quả không.

Đối tượng Trình tạo chỉ chứa các chữ số từ chuỗi.

$ python -mtimeit -s'import string; all=string.maketrans("", ""); nodig=all.translate(all, string.digits); x="aaa12333bb445bb54b5b52"' 'x.translate(all, nodig)'
1000000 loops, best of 3: 1.04 usec per loop
$ python -mtimeit -s'import re;  x="aaa12333bb445bb54b5b52"' 're.sub(r"\D", "", x)'
100000 loops, best of 3: 7.9 usec per loop
0

Bước cuối cùng là tham gia các chữ số vào một chuỗi.

Copied!

my_str = 'a1s2d3f4g5' result = ''.join(char for char in my_str if char.isdigit()) print(result) # 👉️ '12345'

Phương thức str.join lấy một điều đáng tin cậy như một đối số và trả về một chuỗi là sự kết hợp của các chuỗi trong điều kiện có thể sử dụng được.

Chuỗi phương thức được gọi là bật được sử dụng làm phân tách giữa các phần tử.

Đối với các mục đích của chúng tôi, chúng tôi đã gọi phương thức

import string

class Del:
  def __init__(self, keep=string.digits):
    self.comp = dict((ord(c),c) for c in keep)
  def __getitem__(self, k):
    return self.comp.get(k)

DD = Del()

x='aaa12333bb445bb54b5b52'
x.translate(DD)
8 trên một chuỗi trống để tham gia các chữ số mà không có dấu phân cách.

Làm thế nào để bạn loại bỏ không

Sử dụng re.sub () để xóa tất cả các ký tự không phải là số từ một chuỗi. Gọi lại. Sub (mẫu, thay thế, chuỗi) bằng "[^0-9]" làm mẫu, chuỗi trống như thay thế và chuỗi dưới dạng chuỗi để trả về một bản sao của chuỗi bị tước của tất cả các ký tự không phải là số. sub() to remove all non-numeric characters from a string. Call re. sub(pattern, replacement, string) with "[^0-9]" as pattern , the empty string as replacement , and the string as string to return a copy of the string stripped of all non-numeric characters.

Làm cách nào để loại bỏ các chữ số không khỏi chuỗi?

Để loại bỏ tất cả các ký tự không phải là số từ một chuỗi, chức năng thay thế () được sử dụng. thay thế () hàm: Hàm này tìm kiếm một chuỗi cho một giá trị cụ thể hoặc regexp và trả về một chuỗi mới nơi thực hiện thay thế.replace() function is used. replace() Function: This function searches a string for a specific value, or a RegExp, and returns a new string where the replacement is done.

Làm cách nào để loại bỏ các chữ số khỏi chuỗi trong Python?

Hãy thảo luận về những cách khác nhau mà chúng ta có thể đạt được nhiệm vụ này ...
Phương pháp số 1: Sử dụng tham gia và isDigit ().
Phương pháp số 2: Sử dụng dịch và chữ số ..
Phương pháp số 3: Sử dụng Bộ lọc và Lambda ..
Phương thức số 4 sử dụng Join () và Isalpha ().
Phương pháp số 5: Sử dụng vòng lặp và trong ..
Phương pháp số 6: Sử dụng hàm ord () ..

Làm thế nào để bạn loại bỏ một số không từ một danh sách trong Python?

Sử dụng phương thức re.sub () để xóa tất cả các ký tự không phải là dấu chấm.từ một chuỗi, ví dụ:Kết quả = Re.Sub (r '[^0-9.] sub() method to remove all non-numeric characters except for dot . from a string, e.g. result = re. sub(r'[^0-9.]

Làm thế nào để bạn xóa một nhân vật không phải là chữ ký số trong Python?

Hủy bỏ các ký tự không phải là vô cầu khỏi chuỗi Python..
Sử dụng biểu thức thường xuyên.Một giải pháp đơn giản là sử dụng các biểu thức thông thường để loại bỏ các ký tự không phải là số lượng vô số khỏi một chuỗi.....
Sử dụng hàm isalnum ().Một tùy chọn khác là lọc chuỗi khớp với hàm isalnum () ..