none
正则表达式? RRS feed

  • 问题

  • 例如值:-34 d 4#ag 5.35a .63d 用正则表达式将其替换成:-344535.63

    或值:34 d 4#ag 5.35a .63d 用正则表达式将其替换成:344535.63

    其正则表达式如何写?另外,不知有没有这样的已知源数据和结果求正则表达式的工具?

    2012年2月24日 16:35

答案

  • 工具没有见过。

    不过试试下面这个把除了0123456789-.以外的字符都去除的正则:

    var input = "-34 d 4#ag 5.35a .63d";
    var output = System.Text.RegularExpressions.Regex.Replace(input, @"[^0123456789\-\.]", string.Empty);

    • 已标记为答案 仁虎 2012年2月28日 0:32
    2012年2月25日 2:30
  • 你好,

    试试下面的方法:

            static void Main()
            {
                string input = "34 d 4#ag 5.35a .63d";//string input = "-34 d 4#ag 5.35a .63d";
    
                string[] result = System.Text.RegularExpressions.Regex.Split(input, @"[^0123456789\.\-]");
    
                bool isLast =true;
    
                for (int i = result.Length-1; i >=0 ; i--)
                {
                    if (result[i] == string.Empty)
                        continue;
    
                    if (result[i].IndexOf(".") >= 0)
                    {
                        if (!isLast)
                        {
                            result[i] = System.Text.RegularExpressions.Regex.Replace(result[i], @"[^0123456789]", string.Empty);
                        }
                        else
                        {
                            isLast = false;
                            continue;
                            
                        }
                    }
                }
                Console.WriteLine(string.Join(string.Empty, result));
                Console.ReadLine();
            }

    Neddy Ren[MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 仁虎 2012年2月28日 0:32
    2012年2月27日 9:24

全部回复

  • 工具没有见过。

    不过试试下面这个把除了0123456789-.以外的字符都去除的正则:

    var input = "-34 d 4#ag 5.35a .63d";
    var output = System.Text.RegularExpressions.Regex.Replace(input, @"[^0123456789\-\.]", string.Empty);

    • 已标记为答案 仁虎 2012年2月28日 0:32
    2012年2月25日 2:30
  • 感谢回复,验证后得到的结果是:-3445.35.63   还是无法到达效果.

    我曾经想确定右起小数点出现位置后,删除所有小数点后再添加到之前获得到的位置处.但现在有个问题.这个问题主要是出现在WPF的TextBox控件的TextChanged事件上.因为这个事件是当Text内容变化时就执行.而这样就重复删除而无法添加小数点或'-'号.所以想靠正则表达式一次性处理到位.

    2012年2月25日 5:33
  • try this:Expresso - A Tool for Building and Testing Regular Expressions

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年2月25日 5:49
  • 你好,

    试试下面的方法:

            static void Main()
            {
                string input = "34 d 4#ag 5.35a .63d";//string input = "-34 d 4#ag 5.35a .63d";
    
                string[] result = System.Text.RegularExpressions.Regex.Split(input, @"[^0123456789\.\-]");
    
                bool isLast =true;
    
                for (int i = result.Length-1; i >=0 ; i--)
                {
                    if (result[i] == string.Empty)
                        continue;
    
                    if (result[i].IndexOf(".") >= 0)
                    {
                        if (!isLast)
                        {
                            result[i] = System.Text.RegularExpressions.Regex.Replace(result[i], @"[^0123456789]", string.Empty);
                        }
                        else
                        {
                            isLast = false;
                            continue;
                            
                        }
                    }
                }
                Console.WriteLine(string.Join(string.Empty, result));
                Console.ReadLine();
            }

    Neddy Ren[MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 仁虎 2012年2月28日 0:32
    2012年2月27日 9:24
  • 已借鉴并达到所需效果,3Q!
    2012年2月28日 0:34