Hướng dẫn how do i extract a float number from a string in python? - làm cách nào để trích xuất một số thực từ một chuỗi trong python?

Tôi có một số chuỗi tương tự

>>> re.findall(r"[-+]?(?:\d*\.\d+|\d+)", "Current Level: -13.2db or 14.2 or 3")
['-13.2', '14.2', '3']
1 và tôi chỉ muốn trích xuất số điểm nổi. Tôi nói nổi và không số thập phân vì đôi khi nó toàn bộ. Regex có thể làm điều này hoặc có một cách tốt hơn?

Hướng dẫn how do i extract a float number from a string in python? - làm cách nào để trích xuất một số thực từ một chuỗi trong python?

Martineau

Huy hiệu vàng 116K2525 gold badges160 silver badges285 bronze badges

hỏi ngày 16 tháng 1 năm 2011 lúc 2:11Jan 16, 2011 at 2:11

Hướng dẫn how do i extract a float number from a string in python? - làm cách nào để trích xuất một số thực từ một chuỗi trong python?

Ben Keatben KeatBen Keating

7.8469 Huy hiệu vàng36 Huy hiệu bạc37 Huy hiệu Đồng9 gold badges36 silver badges37 bronze badges

2

Nếu phao của bạn luôn được thể hiện trong ký hiệu thập phân

>>> import re
>>> re.findall("\d+\.\d+", "Current Level: 13.4db.")
['13.4']

có thể đủ.

Một phiên bản mạnh mẽ hơn sẽ là:

>>> re.findall(r"[-+]?(?:\d*\.\d+|\d+)", "Current Level: -13.2db or 14.2 or 3")
['-13.2', '14.2', '3']

Nếu bạn muốn xác thực đầu vào của người dùng, bạn cũng có thể kiểm tra một chiếc phao bằng cách bước trực tiếp vào nó:

user_input = "Current Level: 1e100 db"
for token in user_input.split():
    try:
        # if this succeeds, you have your (first) float
        print float(token), "is a float"
    except ValueError:
        print token, "is something else"

# => Would print ...
#
# Current is something else
# Level: is something else
# 1e+100 is a float
# db is something else
        

SRM

2.95016 Huy hiệu bạc 30 Huy hiệu Đồng16 silver badges30 bronze badges

Đã trả lời ngày 16 tháng 1 năm 2011 lúc 2:16Jan 16, 2011 at 2:16

11

Bạn có thể muốn thử một cái gì đó như thế này bao gồm tất cả các cơ sở, bao gồm không dựa vào khoảng trắng sau số:

>>> import re
>>> numeric_const_pattern = r"""
...     [-+]? # optional sign
...     (?:
...         (?: \d* \. \d+ ) # .1 .12 .123 etc 9.1 etc 98.1 etc
...         |
...         (?: \d+ \.? ) # 1. 12. 123. etc 1 12 123 etc
...     )
...     # followed by optional exponent part if desired
...     (?: [Ee] [+-]? \d+ ) ?
...     """
>>> rx = re.compile(numeric_const_pattern, re.VERBOSE)
>>> rx.findall(".1 .12 9.1 98.1 1. 12. 1 12")
['.1', '.12', '9.1', '98.1', '1.', '12.', '1', '12']
>>> rx.findall("-1 +1 2e9 +2E+09 -2e-9")
['-1', '+1', '2e9', '+2E+09', '-2e-9']
>>> rx.findall("current level: -2.03e+99db")
['-2.03e+99']
>>>

Để dễ dàng sao chép lại:

numeric_const_pattern = '[-+]? (?: (?: \d* \. \d+ ) | (?: \d+ \.? ) )(?: [Ee] [+-]? \d+ ) ?'
rx = re.compile(numeric_const_pattern, re.VERBOSE)
rx.findall("Some example: Jr. it. was .23 between 2.3 and 42.31 seconds")

Hướng dẫn how do i extract a float number from a string in python? - làm cách nào để trích xuất một số thực từ một chuỗi trong python?

Joop

3.52631 Huy hiệu bạc52 Huy hiệu đồng31 silver badges52 bronze badges

Đã trả lời ngày 16 tháng 1 năm 2011 lúc 2:46Jan 16, 2011 at 2:46

John Machinjohn MachinJohn Machin

79.6K11 Huy hiệu vàng138 Huy hiệu bạc184 Huy hiệu đồng11 gold badges138 silver badges184 bronze badges

4

Tài liệu Python có câu trả lời bao gồm các ký hiệu +/- và số mũ

scanf() Token      Regular Expression
%e, %E, %f, %g     [-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?
%i                 [-+]?(0[xX][\dA-Fa-f]+|0[0-7]*|\d+)

Biểu thức chính quy này không hỗ trợ các định dạng quốc tế trong đó dấu phẩy được sử dụng làm ký tự phân tách giữa toàn bộ và phần phân số (3.14159). Trong trường hợp đó, thay thế tất cả

>>> re.findall(r"[-+]?(?:\d*\.\d+|\d+)", "Current Level: -13.2db or 14.2 or 3")
['-13.2', '14.2', '3']
2 bằng
>>> re.findall(r"[-+]?(?:\d*\.\d+|\d+)", "Current Level: -13.2db or 14.2 or 3")
['-13.2', '14.2', '3']
3 trong regex float trên.

                        Regular Expression
International float     [-+]?(\d+([.,]\d*)?|[.,]\d+)([eE][-+]?\d+)?

Đã trả lời ngày 14 tháng 8 năm 2013 lúc 17:07Aug 14, 2013 at 17:07

IceardoSoRdorIceArdor

1.90119 Huy hiệu bạc20 Huy hiệu Đồng19 silver badges20 bronze badges

re.findall(r"[-+]?\d*\.?\d+|\d+", "Current Level: -13.2 db or 14.2 or 3")

Như mô tả ở trên, hoạt động thực sự tốt! Một gợi ý mặc dù:

re.findall(r"[-+]?\d*\.?\d+|[-+]?\d+", "Current Level: -13.2 db or 14.2 or 3 or -3")

cũng sẽ trả về các giá trị int âm (như -3 ở cuối chuỗi này)

Hướng dẫn how do i extract a float number from a string in python? - làm cách nào để trích xuất một số thực từ một chuỗi trong python?

Đã trả lời ngày 25 tháng 11 năm 2011 lúc 10:24Nov 25, 2011 at 10:24

MartinmartinMartin

1011 Huy hiệu bạc2 Huy hiệu đồng1 silver badge2 bronze badges

Bạn có thể sử dụng Regex sau để có được các giá trị số nguyên và nổi từ một chuỗi:

re.findall(r'[\d\.\d]+', 'hello -34 42 +34.478m 88 cricket -44.3')

['34', '42', '34.478', '88', '44.3']

Cảm ơn Rex

Đã trả lời ngày 21 tháng 5 năm 2014 lúc 15:14May 21, 2014 at 15:14

1

Tôi nghĩ rằng bạn sẽ tìm thấy những thứ thú vị trong câu trả lời sau đây của tôi mà tôi đã làm cho một câu hỏi tương tự trước đó:

https://stackoverflow.com/q/5929469/551449

Trong câu trả lời này, tôi đã đề xuất một mẫu cho phép Regex bắt bất kỳ loại nào và vì tôi không có gì khác để thêm vào nó, tôi nghĩ nó khá hoàn chỉnh

Đã trả lời ngày 25 tháng 11 năm 2011 lúc 11:08Nov 25, 2011 at 11:08

Eyquemeyquemeyquem

26.1k7 Huy hiệu vàng36 Huy hiệu bạc45 Huy hiệu Đồng7 gold badges36 silver badges45 bronze badges

Một cách tiếp cận khác có thể dễ đọc hơn là chuyển đổi loại đơn giản. Tôi đã thêm một chức năng thay thế để bao gồm các trường hợp trong đó mọi người có thể vào số thập phân châu Âu:

>>> re.findall(r"[-+]?(?:\d*\.\d+|\d+)", "Current Level: -13.2db or 14.2 or 3")
['-13.2', '14.2', '3']
0

Điều này cũng có nhược điểm. Nếu ai đó gõ vào "1.000", điều này sẽ được chuyển đổi thành 1. Ngoài ra, nó giả định rằng mọi người sẽ nhập vào khoảng trắng giữa các từ. Đây không phải là trường hợp với các ngôn ngữ khác, chẳng hạn như tiếng Trung.

Đã trả lời ngày 16 tháng 1 năm 2011 lúc 2:40Jan 16, 2011 at 2:40

Hướng dẫn how do i extract a float number from a string in python? - làm cách nào để trích xuất một số thực từ một chuỗi trong python?

Tim McNamaratim McNamaraTim McNamara

17.7K4 Huy hiệu vàng51 Huy hiệu bạc82 Huy hiệu Đồng4 gold badges51 silver badges82 bronze badges

2

Làm thế nào để bạn nhận được một số float từ một chuỗi trong Python?

Chúng ta có thể chuyển đổi một chuỗi thành float trong python bằng hàm float (). Đây là một chức năng tích hợp được sử dụng để chuyển đổi một đối tượng thành số điểm nổi. Trong nội bộ, hàm float () gọi đối tượng được chỉ định __float __ () hàm.using the float() function. This is a built-in function used to convert an object to a floating point number. Internally, the float() function calls specified object __float__() function.

Làm thế nào để bạn trích xuất số từ một chuỗi trong Python?

Vấn đề này có thể được giải quyết bằng cách sử dụng chức năng phân chia để chuyển đổi chuỗi thành danh sách và sau đó danh sách hiểu có thể giúp chúng tôi lặp qua chức năng danh sách và isDigit giúp loại bỏ chữ số ra khỏi chuỗi.using split function to convert string to list and then the list comprehension which can help us iterating through the list and isdigit function helps to get the digit out of a string.

Làm thế nào để bạn tìm thấy giá trị float của một chuỗi?

Để chuyển đổi chuỗi thành các giá trị nổi, chúng ta có thể sử dụng float.parsefloat () nếu chúng ta cần một float nguyên thủy hoặc float.valueof () nếu chúng ta thích một đối tượng float.Float. parseFloat() if we need a float primitive or Float. valueOf() if we prefer a Float object.

Làm thế nào để bạn trích xuất số thập phân từ một chuỗi trong Python?

Sử dụng hàm isDigit () để trích xuất các chữ số từ chuỗi python.Python cung cấp cho chúng tôi chuỗi.isDigit () để kiểm tra sự hiện diện của các chữ số trong một chuỗi.Hàm python isDigit () trả về true nếu chuỗi đầu vào chứa các ký tự chữ số trong đó.isdigit() function to extract digits from a Python string. Python provides us with string. isdigit() to check for the presence of digits in a string. Python isdigit() function returns True if the input string contains digit characters in it.