(\d+(?:\.\d+)?)\D*$
- 这个正则表达式从任何带小数点的字符串中提取价格,但是我想只在有东西但不是零时提取小数点,就像有300.50或300.25时那样提取小数点但是如果有300.00则不应提取小数点,该怎么办?
这没关系,还是有更好的解决方案?
Match match = Regex.Match(cellRecord, @"(\d+(?:\.\d+)?)\D*$");
price = match.Groups[1].Value.ToString().Trim();
if (price.Substring(price.Length - 3, 3) == ".00")
{
price = price.Replace(".00", "");
}
答案 0 :(得分:3)
我还会调查使用Double.Parse和正确的文化信息 - 这通常比使用你自己的正则表达式更简单,更稳定。
答案 1 :(得分:1)
假设更好的方式,你的意思是“正则表达式可以自己做吗?”然后:
([0-9]+(?:\.(?:[1-9][1-9]|[0-9][1-9]|[1-9][0-9]))?)(?=[^0-9])
将匹配放在第一个正则表达式分组中。这个正则表达式正在做的是匹配任何数字,然后匹配“美分”部分,允许除00之外的任何数字组合。另请注意,这与“美分”部分中的两位数匹配。
请注意,这个正则表达式使用[0-9]而不是\ d来使它更清晰,哪些数字是可以接受的。
编辑:请注意这个正则表达式是在GNU / Emacs中测试的,而不是C#,但我不认为这种情况有任何区别。
编辑:我犯了一个小错误,正则表达式匹配'300'。不是'300',调整后的正则表达式只会在匹配时对句点进行分组。
答案 2 :(得分:0)
此正则表达式适用于您提到的输入。请参阅下面的输出。
"\b(\d+(?:\.(?:[^0]\d|\d[^0]))?)\b"
如下工作
input OPTIDX 26FEB2009 NIFTY CE 2800
output 2800
input 123.00
output 123
input 123.06
output 123.06
input 123.50
output 123.50
答案 3 :(得分:0)
所有价格格式
并与其他字符串连接
1.234,56asdfdasfdsaf
和所有格式
正则表达式
@"((?<=\s)|^)[-+]?((\d{1,3}([,\s.']\d{3})*)|\d+)([.,/-]\d+)?((?=\s)|$)"