我需要像“joe($ 3,004.50)”这样的文本过滤到3004.50,但在正则表达式中很糟糕,找不到合适的解决方案。所以只有数字和时段应该保留 - 所有其他过滤。我使用C#和VS.net 2008年框架3.5正则表达式删除所有(非数字或期)
回答
这应做到:
string s = "joe ($3,004.50)";
s = Regex.Replace(s, "[^0-9.]", "");
的正则表达式是:
[^0-9.]
可以缓存正则表达式:
Regex not_num_period = new Regex("[^0-9.]")
然后使用:
string result = not_num_period.Replace("joe ($3,004.50)", "");
然而,您应该记住,一些文化在编写货币金额时有不同的惯例,例如:3.004,50。
懒得ATM进行验证,但并不需要转义的。 ? – 2010-06-16 17:38:20
@Andrew:不,在一个字符类中,'.'没有特别的意义。 – 2010-06-16 17:38:58
移除违规字符的方法可能是有问题的。如果字符串中有另一个.
会怎么样?它不会被删除,但它应该!
删除非数字或句点,字符串joe.smith ($3,004.50)
将转换为不可解析的.3004.50
。
Imho,最好匹配一个特定的模式,并使用组提取它。简单的东西是要找到所有连续逗号,数字,并用正则表达式的时期:
[\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
的情况,您可以进行另一次检查,看看匹配的子字符串最多只有一个.
。
对于接受的答案,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, ",", "");
}
你正在处理一个字符串 - 字符串是一个IEumerable<char>
,所以你可以使用LINQ:
var input = "joe ($3,004.50)";
var result = String.Join("", input.Where(c => Char.IsDigit(c) || c == '.'));
Console.WriteLine(result); // 3004.50
- 1. 正则表达式:删除所有,但?
- 2. 删除所有正则表达式
- 3. 正则表达式从数字删除字符,但并非所有的字符
- 4. 正则表达式 - 删除所有非字母数字字符CRLF问题
- 5. powershell正则表达式删除数字
- 6. 正则表达式:去除非字母数字或标点
- 7. 正则表达式的表达式对所有非字母数字符号
- 8. 如何用Perl正则表达式删除所有连字符?
- 9. 正则表达式删除所有特殊字符的URL
- 10. VBScript正则表达式删除所有字符,但数字和连字符(“ - ”)
- 11. 正则表达式删除连字符
- 12. 正则表达式:删除白字
- 13. 正则表达式匹配所有单数或双数数字
- 14. 正则表达式,删除除了数字以外的所有东西
- 15. 蟒蛇正则表达式,删除所有除\ d \ S \ W
- 16. 正则表达式来排除所有字符,除了字母
- 17. PHP正则表达式删除数字和句点以外的所有字符
- 18. 删除非Alpha字符正则表达式
- 19. 正则表达式从UTF8字符串中删除非字母数字字符
- 20. 正则表达式 - 剥离非数字并删除美分(如果有的话)
- 21. 删除。*正则表达式打破正则表达式
- 22. Python的正则表达式删除Word用正则表达式
- 23. 正则表达式删除非字母数字字符和点后的所有字符?
- 24. 删除一切有10位数字的正则表达式
- 25. 正则表达式可以接受所有数字或所有字母
- 26. 正则表达式为所有字母
- 27. Ultraedit正则表达式来删除包含数字的所有单词
- 28. 正则表达式删除除
- 29. 删除所有非单词字符,除非&或'模式
- 30. 删除短于n的所有单词的正则表达式
不知道你能做到这一点,谢谢! – VoodooChild 2010-06-16 17:41:14
非常感谢:) – 2010-06-16 18:27:58
'joe.smith($ 3,004.50)'?简单地删除冒犯的字符类可能会非常错误。 – 2015-12-03 09:23:49