簡體   English   中英

正則表達式獲取字符串中的十進制值

[英]Regex to get decimal value in string

因為我是C#開發人員,所以我也會接受C#答案。

可以說我有以下字符串:“ R 560.00”

有一個字母字符和一個帶十進制值的空格。

我們還可以在字符串上加上引號。

但是我想要的是僅在字符串中獲取十進制值。 所有其他字符都應刪除。

注意:String.Replace不能按我想要的方式工作,這就是為什么我轉向正則表達式。

這是我嘗試過的:fields(amountIdx)將包含R560.00

Dim regex As New Regex("^[0-9]+(\.[0-9]{1,2})?$", RegexOptions.IgnoreCase)
Dim amount As String = regex.Replace(fields(amountIdx), "^[0-9]+(\.[0-9]{1,2})?$")

但金額反映為R 560.00。 它不會刪除其他字符。 我該怎么做?

您可以簡單地使用

Regex.Replace("R500.12", "[^-?\d+\.]", ""))

例如: MsgBox(Regex.Replace("R500.12", "[^-?\\d+\\.]", ""))

它將返回500.12

嘗試這個

var resultArray = Regex.Split(input_string, @"[^0-9\.]+")
.Where(c => c != "." && c.Trim() != "");

其中(c => ...)是用於處理數組每個元素的lambda,而c是數組元素

這是一個LINQ hack,它采用字符串中的第一個十進制y正數,其中“十進制y”由一系列數字和點定義:

string s = "R 560.00";
string decimalyNumber = new String(s.SkipWhile(c => !Char.IsDigit(c) || c != '.')
    .TakeWhile(c => Char.IsDigit(c) || c == '.').ToArray());

它的工作方式是跳過字符,直到找到一個數字/點,然后按數字和點的連續順序獲取所有內容。 我可以想象性能不會那么熱,但是除非您能在短時間內完成數百萬個任務...


或者,您可以使用Regex並簡單地匹配[0-9]*(?:\\.[0-9]+)? ,可以是零個或多個數字(可選),后跟一個點和一個或多個數字(未捕獲)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM