Answers:
正则表达式为:
[^0-9.]
您可以缓存正则表达式:
Regex not_num_period = new Regex("[^0-9.]")
然后使用:
string result = not_num_period.Replace("joe ($3,004.50)", "");
但是,您应该记住,某些文化在编写货币金额方面有不同的约定,例如:3.004,50。
.
没有特殊含义。
对于可接受的答案,MatthewGunn提出了一个有效的观点,即整个字符串中的所有数字,逗号和句点将被压缩在一起。这样可以避免:
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, ",", "");
}
(?:^|[^w.,])(\d[\d,.]+)(?=\W|$)
还将匹配字符串“ joe.smith25($ 3,004.50)”中的“ h25”
删除冒犯性人物的方法可能存在问题。如果.
字符串中的某处还有另一个怎么办?它不会被删除,尽管应该删除!
除去非数字或句点,字符串joe.smith ($3,004.50)
将转换为unparseable .3004.50
。
恕我直言,最好匹配特定的模式,然后使用组将其提取。简单的方法是使用regexp查找所有连续的逗号,数字和句点:
[\d,\.]+
样本测试运行:
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"
然后,对于每个匹配项,删除所有逗号并将其发送到解析器。要处理类似的情况12.323.344
,您可以再次检查以查看匹配的子字符串最多具有一个.
。
""
。
Single.Parse()
还是Single.TryParse
?
joe.smith ($3,004.50)
呢 简单地删除令人讨厌的字符类可能会出错。