正则表达式删除所有(非数字OR期间)

Rea*_*ent 83 c# regex

我需要将"joe($ 3,004.50)"这样的文字过滤到3004.50,但在正则表达式上很糟糕,找不到合适的解决方案.所以只有数字和句号应该保留 - 其他一切都被过滤掉 我使用C#和VS.net 2008 framework 3.5

jos*_*989 157

这应该这样做:

string s = "joe ($3,004.50)";
s = Regex.Replace(s, "[^0-9.]", "");
Run Code Online (Sandbox Code Playgroud)

  • “joe.smith ($3,004.50)”呢?简单地删除有问题的字符类可能会出错。 (2认同)
  • 我做了一个小的修正:`Regex.Replace(s,"[^ $ 0-9.]","");`你想留下美元符号. (2认同)

Mat*_*hen 33

正则表达式是:

[^0-9.]
Run Code Online (Sandbox Code Playgroud)

你可以缓存正则表达式:

Regex not_num_period = new Regex("[^0-9.]")
Run Code Online (Sandbox Code Playgroud)

然后使用:

string result = not_num_period.Replace("joe ($3,004.50)", "");
Run Code Online (Sandbox Code Playgroud)

但是,您应该记住,某些文化在编写货币金额时有不同的惯例,例如:3.004,50.

  • @Andrew:不,在字符类中,`.`没有特殊含义. (7认同)