Tôi cần cho văn bản như "joe ($ 3,004.50)" để được lọc xuống 3004.50 nhưng khủng khiếp tại regex và không thể tìm thấy một giải pháp phù hợp. Vì vậy, chỉ có các số và dấu chấm nên ở lại - mọi thứ khác được lọc. Tôi sử dụng C# và VS.net 2008 framework 3.5Regex để loại bỏ tất cả (không phải số OR thời gian)
Trả lời
này nên làm điều đó:
string s = "joe ($3,004.50)";
s = Regex.Replace(s, "[^0-9.]", "");
Các regex là:
[^0-9.]
Bạn có thể cache regex:
Regex not_num_period = new Regex("[^0-9.]")
sau đó sử dụng:
string result = not_num_period.Replace("joe ($3,004.50)", "");
Tuy nhiên, bạn nên nhớ rằng một số nền văn hóa có các quy ước khác nhau để viết số tiền, chẳng hạn như: 3.004,50.
Quá lười biếng ATM để xác minh, nhưng bạn không cần phải thoát khỏi các . ? –
@Andrew: không, bên trong một lớp nhân vật, '.' không có ý nghĩa đặc biệt. –
Phương pháp loại bỏ các nhân vật vi phạm là có khả năng có vấn đề. Điều gì sẽ xảy ra nếu có một số .
khác trong chuỗi? Nó sẽ không được gỡ bỏ, mặc dù nó nên!
Xóa không có chữ số hoặc dấu chấm, chuỗi joe.smith ($3,004.50)
sẽ chuyển thành số không thể khai báo .3004.50
.
Imho, tốt hơn là nên khớp một mẫu cụ thể và trích xuất bằng cách sử dụng nhóm. Một cái gì đó đơn giản có thể tìm thấy tất cả tiếp giáp dấu phẩy, chữ số, và thời gian với regexp:
[\d,\.]+
mẫu chạy thử nghiệm:
Pattern understood as:
[\d,\.]+
Enter string to check if matches pattern
> a2.3 fjdfadfj34 34j3424 2,300 adsfa
Group 0 match: "2.3"
Group 0 match: "34"
Group 0 match: "34"
Group 0 match: "3424"
Group 0 match: "2,300"
Sau đó cho mỗi trận đấu, loại bỏ tất cả dấu phẩy và gửi đó để phân tích cú pháp. Để xử lý trường hợp giống như 12.323.344
, bạn có thể thực hiện một kiểm tra khác để xem chuỗi con phù hợp có tối đa một số .
hay không.
Đối với câu trả lời được chấp nhận, MatthewGunn tăng điểm hợp lệ ở tất cả các chữ số, dấu phẩy và dấu chấm trong toàn bộ chuỗi sẽ được cô đặc lại với nhau. Điều này sẽ tránh rằng:
string s = "joe.smith ($3,004.50)";
Regex r = new Regex(@"(?:^|[^w.,])(\d[\d,.]+)(?=\W|$)/)");
Match m = r.match(s);
string v = null;
if (m.Success) {
v = m.Groups[1].Value;
v = Regex.Replace(v, ",", "");
}
Bạn đang đối phó với một chuỗi - chuỗi là một IEumerable<char>
, vì vậy bạn có thể sử dụng LINQ:
var input = "joe ($3,004.50)";
var result = String.Join("", input.Where(c => Char.IsDigit(c) || c == '.'));
Console.WriteLine(result); // 3004.50
- 1. Regex cho tất cả các không gian trước một số
- 2. Python regex để loại bỏ tất cả các từ có chứa số
- 3. gian Loại bỏ bất cứ điều gì và đó không phải là chữ và số
- 4. Regex để loại bỏ các ký tự không phải chữ và số từ các chuỗi UTF8
- 5. Javascript regex để loại bỏ số lượng, sau đó một không gian?
- 6. Regex - Không phải là số và loại bỏ xu nếu có
- 7. Regex loại bỏ tất cả mọi thứ sau: (bao gồm cả :)
- 8. Loại bỏ tất cả các số thập phân trong PHP
- 9. Sử dụng Python để loại bỏ tất cả các dòng khớp với Regex
- 10. Loại bỏ tất cả các ký tự khoảng trắng trừ ""
- 11. Làm thế nào để loại bỏ tất cả các ký tự không phải chữ số và không gian từ một chuỗi trong PHP?
- 12. Làm thế nào để loại bỏ tất cả các số không bắt đầu từ chuỗi?
- 13. (>) có phải loại bỏ tất cả các đầu ra bên trái không?
- 14. Làm thế nào để loại bỏ tất cả các ký tự không phải chữ và số từ một chuỗi ngoại trừ dấu chấm và dấu cách trong excel?
- 15. Regex; loại trừ tất cả dấu chấm câu ngoại trừ
- 16. T-SQL bỏ tất cả các ký tự không phải là alpha và không phải là số
- 17. Java: loại bỏ tất cả các ký tự sau thời điểm
- 18. Java regex để loại bỏ thẻ XML, nhưng không phải thẻ nội dung
- 19. Làm thế nào để loại bỏ cột mà không có thời gian chết với ActiveRecord 3.1?
- 20. psycopg2 "Lỗi Loại: không phải tất cả đối số được chuyển đổi trong chuỗi định dạng"
- 21. URL Mã hóa tất cả số không phải là chữ số alpha trong C#
- 22. regex để xác nhận thời gian
- 23. python regex để thay thế tất cả các cửa sổ dòng mới với không gian
- 24. Loại bỏ tất cả các libs OpenCV được cài đặt
- 25. thay thế tất cả các ngắt dòng không phải trước một khoảng thời gian có cụm từ thông dụng?
- 26. Xem tất cả thời gian chờ/khoảng thời gian trong javascript?
- 27. PHP, loại bỏ thời gian và nhiều hơn nữa
- 28. Bắt tất cả các thông số URL sử dụng regex
- 29. Loại bỏ thẻ hình ảnh html và tất cả mọi thứ ở giữa từ một chuỗi
- 30. Có cách nào để loại bỏ một nút UIalertView không sau một thời gian không?
Không biết bạn có thể làm điều này, cảm ơn! – VoodooChild
cảm ơn thực sự :) –
Điều gì về 'joe.smith ($ 3,004.50)'? Đơn giản chỉ cần loại bỏ các lớp nhân vật vi phạm có thể đi khá sai. –