Làm cách nào để trích xuất giá trị kép từ chuỗi bằng regex.Trích xuất phao/giá trị kép
import re
pattr = re.compile(???)
x = pattr.match("4.5")
Làm cách nào để trích xuất giá trị kép từ chuỗi bằng regex.Trích xuất phao/giá trị kép
import re
pattr = re.compile(???)
x = pattr.match("4.5")
Dưới đây là một cách dễ dàng. Không sử dụng regex cho các loại built-in.
try:
x = float(someString)
except ValueError, e:
# someString was NOT floating-point, what now?
Một regexp từ perldoc perlretut
:
import re
re_float = re.compile("""(?x)
^
[+-]?\ * # first, match an optional sign *and space*
( # then match integers or f.p. mantissas:
\d+ # start out with a ...
(
\.\d* # mantissa of the form a.b or a.
)? # ? takes care of integers of the form a
|\.\d+ # mantissa of the form .b
)
([eE][+-]?\d+)? # finally, optionally match an exponent
$""")
m = re_float.match("4.5")
print m.group(0)
# -> 4.5
Để trích xuất số điện thoại từ một chuỗi lớn hơn:
s = """4.5 abc -4.5 abc - 4.5 abc + .1e10 abc . abc 1.01e-2 abc
1.01e-.2 abc 123 abc .123"""
print re.findall(r"[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?", s)
# -> ['4.5', '-4.5', '- 4.5', '+ .1e10', ' 1.01e-2',
# ' 1.01', '-.2', ' 123', ' .123']
Biểu thức tìm thấy là kinh doanh, nhờ – reabow
một phao như cụm từ thông dụng trong lực lượng vũ phu. có sự khác biệt nhỏ hơn phiên bản của JF Sebastian:
import re
if __name__ == '__main__':
x = str(1.000e-123)
reFloat = r'(^[+-]?\d+(?:\.\d+)?(?:[eE][+-]\d+)?$)'
print re.match(reFloat,x)
>>> <_sre.SRE_Match object at 0x0054D3E0>
Điều này không khớp với phao không có phần nguyên, ví dụ: '.123' thay vì' 0.123'. –
Đối với phân tích cú pháp int và float (điểm separator) giá trị:
re.findall(r'\d+\.*\d*', 'some 12 12.3 0 any text 0.8')
kết quả:
['12', '12.3', '0', '0.8']
Nếu bạn có thể cung cấp một thủ tục để có được int hoặc float nhưng không có nó trong một từ điển hoặc mảng thì nó sẽ hữu ích. những gì tôi có 'str1 =" BIOS: phiên bản 2.0.0 "' những gì tôi muốn '2.0.0' không có bất kỳ dấu phẩy hoặc dấu ngoặc nào. –
Xin chào, bạn có thể sử dụng như: re.findall (r '[\ d \.] +', "BIOS: phiên bản 2.0.0") –
tốt hơn: re.findall (r '[\ d \.] {2, } | \ d + ', "BIOS: phiên bản 2.0.0") –
thể bạn cung cấp một số chi tiết trên tại sao bạn không thể sử dụng float ("4.5")? – jfs