Trích xuất float từ chuỗi python

Trong bài viết trước của tôi, chúng ta đã thấy cách tách một chuỗi dài được phân tách thành nhiều chuỗi và lưu trữ chúng trong một danh sách. Bây giờ chúng ta sẽ xem cách trích xuất các số từ một chuỗi. Không có cách đơn giản nào trong Python để làm điều này. Chúng ta phải viết logic của riêng mình để trích xuất các con số. Đây là một trong những phương pháp tôi đang theo dõi

Phương pháp này liên quan đến việc tách từ khỏi câu dài, sau đó cố gắng chuyển đổi từ được tách riêng thành dấu phẩy, nếu nó gây ra lỗi, sau đó bắt ngoại lệ và vượt qua. nếu được chuyển đổi thành công, hãy thêm số float vào danh sách. Phương pháp này có thể trích xuất số nguyên, số float và số âm và chuyển đổi chúng thành số float. Đây là một mẫu mã

# Assogn a long string to a variable some_string = "Some paragraph with 2 to 5 numbers and some float \ and nagetive numbers like -23 or 32.5 to test the split \ option in Python version 3.7" # Logic to get the numbers in a list numbers = [] for word in some_string.split(): try: numbers.append(float(word)) except ValueError: pass print(numbers)

Kết quả

[2.0, 5.0, -23.0, 32.5, 3.7]

Mẹo khác

  • Làm cách nào để trích xuất số từ chuỗi trong SQL Server?

Tài liệu tham khảo

  • Tìm hiểu thêm về str. split() tại tài liệu Python

  • Nhấp để chia sẻ trên LinkedIn (Mở trong cửa sổ mới)
  • Bấm để chia sẻ trên Facebook (Opens in new window)
  • Nhấp để chia sẻ trên Twitter (Mở trong cửa sổ mới)
  • Nhấp để chia sẻ trên Reddit (Mở trong cửa sổ mới)
  • Nhấp để chia sẻ trên WhatsApp (Mở trong cửa sổ mới)
  • Nhấp để chia sẻ trên Pocket (Mở trong cửa sổ mới)
  • Nhấp để gửi email liên kết cho bạn bè (Mở trong cửa sổ mới)
  • Bấm để in (Mở trong cửa sổ mới)

Bạn cũng có thể thích

Trong hướng dẫn này, chúng ta sẽ xem xét cách trích xuất số float từ một chuỗi trong Java. Để làm điều này, chúng ta sẽ sử dụng một biểu thức chính quy để khớp và tìm các giá trị float trong một chuỗi

Trích xuất số float từ một chuỗi trong Java

Chúng tôi sẽ sử dụng khớp mẫu để tìm số float từ chuỗi. Đưa ra dưới đây là mẫu mà bạn có thể sử dụng. Mẫu này cũng có thể xác định số float âm

"[-]?[0-9]*\\.?[0-9]+"

Tiếp theo, chúng ta phải khớp nó với chuỗi đầu vào có thể được thực hiện bằng cách sử dụng lớp đối sánh. Sau đó, sử dụng phương thức find() và group() chúng ta nhóm và lưu trữ các số float

Chương trình sau sử dụng các phương pháp trên và cung cấp cho chúng tôi đầu ra cần thiết

import java.util.regex.Matcher; import java.util.regex.Pattern; public class FloatFromString { public static void main(String args[]) { //input string String s = "Your total bill ammount is 1243.45 Rs."; float flt = 0; //Creating a pattern to identify floats Pattern pat = Pattern.compile("[-]?[0-9]*\\.?[0-9]+"); //matching the string with the pattern Matcher m = pat.matcher(s); //extracting and storing the float values while(m.find()) { flt = Float.parseFloat(m.group()); } //printing the float values System.out.println("The float value from the string is:"); System.out.println(flt); } }

đầu ra

The float value from the string is: 1243.45

Chương trình trên có thể được sửa đổi để trích xuất nhiều giá trị float từ chuỗi bằng ArrayList. Điều này được thể hiện trong chương trình dưới đây

import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public class FloatFromString { public static void main(String args[]) { //input string String s = "Your total bill ammount is 1243.45 Rs. and tax to be paid is 45.65 Rs."; //ArrayList to store the output ArrayList<Float> f = new ArrayList<Float>(); //Creating a pattern to identify floats Pattern pat = Pattern.compile("[-]?[0-9]*\\.?[0-9]+"); //matching the string with the pattern Matcher m = pat.matcher(s); //extracting and storing the float values while(m.find()) { f.add(Float.parseFloat(m.group())); } //printing the float values System.out.println("The float values from the string are:"); for(int i =0; i<f.size(); i++) { System.out.println(f.get(i)); } } }

đầu ra

The float values from the string are: 1243.45 45.65

Đây là một hướng dẫn mà bạn có thể kiểm tra tiếp theo. Xóa khoảng trắng ở đầu và cuối chuỗi trong Java

Trích xuất các số của danh sách chuỗi nằm trong ngoặc và để lại tiền tố và kết quả là số. Ví dụ

danh sách gốc=[[“mèo/trai hư [3421]”],[“mèo/trai ngoan [5634]”]],[[“mèo/trai hư [3421]”],[“mèo/trai ngoan [
result desired=[[“cat/3421”],[“cat/5634”]],[[“cat/3421”],[“cat/5634”]]

Về cơ bản tôi sẽ làm điều này. xóa bất kỳ chuỗi nào giữa “/” và “[” và xóa cả “]”

với các nút tôi sẽ làm điều đó với chuỗi. tách với dấu phân cách là “/”,"[","]" và xóa khỏi 3 kết quả, kết quả ở giữa và nối thành một chuỗi duy nhất những kết quả còn lại

hình ảnh1213×743 76. 7KB


trích xuất số từ ngoặc và giữ nguyên tiền tố. dyn (12. 6KB)

hoặc tôi sẽ chỉ trích xuất số giữa các dấu ngoặc và thêm cùng tiền tố “cat/” vào trước số được trích xuất

Tôi đã nhận được mã python này để trích xuất các số từ chuỗi nhưng tôi không biết cách thêm điều kiện để lấy số giữa các dấu ngoặc

import clr # True if character is a number, false otherwise def IsNum(char): try: int(char) return True except ValueError: return False # Join a single list of characters into a string def JoinChars(chars): if not chars: return None elif len(chars) == 1: return chars[0] else: return "".join(chars) # Return a list of contiguous numbers from a string def StringToNumbers(str): # Extract lists of contiguous number characters nums = [] lastWasNum = False ls = [] for i in range(len(str)): if IsNum(str[i]): ls.append(str[i]) lastWasNum = True elif str[i] == "." and lastWasNum: ls.append(str[i]) elif lastWasNum: nums.append(ls) ls = [] lastWasNum = False if i == len(str)-1 and ls: nums.append(ls) # Cast character strings to numbers if not nums: return [None,None] elif len(nums) == 1: asStr = JoinChars(nums[0]) return [asStr,float(asStr)] else: asStr = [] asNum = [] for i in range(len(nums)): oneStr = JoinChars(nums[i]) asStr.append(oneStr) asNum.append(float(oneStr)) return [asStr,asNum] str = IN[0] OUT = StringToNumbers(str)

c. người ăn mày

________số 8

người ngoài hành tinh

Thật tuyệt khi thấy một số ghi chú trên đó

Xin chào,

  1. Trong ví dụ này, tôi đang sử dụng biểu thức chính quy với chụp 2 nhóm (sử dụng dấu ngoặc đơn) và toàn bộ biểu thức chính quy tạo thành một đối sánh đầy đủ

hình ảnh936×551 44. 7KB

regex101

regex101. xây dựng, thử nghiệm và gỡ lỗi regex

Trình kiểm tra biểu thức chính quy với tô sáng cú pháp, giải thích, cheat sheet cho PHP/PCRE, Python, GO, JavaScript, Java, C#/. MẠNG LƯỚI

  1. một khi các nhóm được thành lập, tôi sử dụng lại. sub() để thay thế toàn bộ trận đấu bằng cách nối 2 nhóm với [2.0, 5.0, -23.0, 32.5, 3.7] 1 để truy cập chúng
Hướng dẫn Python - Làm chủ lập trình Python cho người mới bắt đầu từ đầu

Hàm Regex sub() của Python

Trong hướng dẫn này, bạn sẽ tìm hiểu về hàm regex sub() của Python trả về một chuỗi sau khi thay thế mẫu phù hợp trong một chuỗi bằng một mẫu thay thế

ước tính. thời gian đọc. 4 phút

JacobNhỏ

import re strings = IN[0] results = [] for str in strings: found = re.findall(“(\w+)/|\[\d+\]”, str) results.append([f for set in found for f in set if f != “”]) OUT = results

Xin chào @JacobSmall Tôi kiểm tra điều này và tôi nhận được một cảnh báo rằng tôi không hiểu, tôi tưởng tượng đó là một cái gì đó đã gõ sai giữa " "

hình ảnh1146×378 102 KB

Giải pháp của @c. poupin đã cho tôi kết quả giống hệt như đầu vào chuỗi nên có thể nó không hoạt động với danh sách con hoặc không có chức năng tìm số giữa các dấu ngoặc

Giải pháp của @Alien khiến Dynamo không phản hồi giống như bị treo trong nhiều phút và kết quả là có hàng triệu danh sách phụ của một mục có giá trị “/”, vì vậy tôi không biết điều gì có thể sai

hình ảnh1152×549 44. 8KB

[2.0, 5.0, -23.0, 32.5, 3.7] 0

một điều cần đề cập và có lẽ vấn đề là danh sách đầu vào chứa các danh sách con trong đó không phải tất cả các mục đều có số giữa dấu ngoặc và dấu phân cách “/” có chuỗi ở giữa

người ngoài hành tinh

Nó đã làm tổ quá nhiều…

xin chào, nó cho tôi kết quả, mặc dù kết quả bây giờ là danh sách con của một mục và tất cả các chuỗi được sửa đổi hoặc xóa, phần lớn được thay thế bằng “/”, và các mục có số giữa các dấu ngoặc giống như số đầu tiên cộng với “/” cộng với . Tôi nghĩ rằng điều này cần điều kiện là nếu chuỗi không chứa số giữa các dấu ngoặc không chỉnh sửa mục thì hãy để nguyên như vậy

Tôi đã thử tất cả các giải pháp được cung cấp và đây là kết quả trong ảnh chụp màn hình và tệp máy phát điện
extractnumberfrombracketsandremainprefix. dyn (24. 0 KB)
.
@JacobSmall giải pháp 1

hình ảnh1238×862 89 KB


@JacobSmall giải pháp 2

hình ảnh1230×823 88. 4KB


@WrightEngineering solution 1

image1222×748 86. 7KB


@c. poupin nó hoạt động nhưng nó có thể sửa đổi chuỗi khác bằng dấu phân cách là dấu cách hoặc “-”, vì vậy rất nguy hiểm
@Alien nó làm điều gì đó không mong muốn

giải pháp của @c. poupin dường như hoạt động trong ví dụ đơn giản đó nhưng trong trường hợp thực tế của tôi, nó sửa đổi các giá trị mục chuỗi khác không được mong đợi

giải pháp của @Alien có vẻ thú vị với phương pháp phân tách nhưng vì một số lý do, nó nhận được các mục sai của danh sách phụ, có lẽ nó cần phải hoạt động với danh sách phụ

giải pháp của @JacobSmall có vẻ thú vị nhưng tôi hoàn toàn không hiểu các cảnh báo, điều này mới đối với tôi

Chưa có gì hiệu quả, có lẽ thay đổi bài tập mẫu hoặc câu hỏi sẽ dễ dàng hơn. Tôi đang nghĩ chỉ trích xuất số giữa các dấu ngoặc thay thế chuỗi ban đầu và để lại phần còn lại của chuỗi không chứa số giữa các dấu ngoặc

Chủ đề