none
怎么利用正规表达式截取字符串? RRS feed

  • 问题

  • string a="(123,456)";

    怎么利用正规表达式让string x="123"; string y="456";或用字符串数组表示也可以.

    2012年4月9日 13:12

答案

  • 如果你所用a中的字符串格式一直是用逗号分割并且两端是数字的话,那么可以简单使用这种方式实现。

    请看:

            static void Main(string[] args)
            {
                string context = "(123,456)";
                MatchCollection matchCollection = Regex.Matches(context, @"\d+");
                foreach (Match m in matchCollection)
                {
                    Console.WriteLine(m.ToString());
                }
                Console.ReadKey();
                
                //输出:
                // 123
                // 456
            }





    2012年4月10日 1:06
  • 我只要给二个变量赋值就可以了,不用输出的

    简单解释:正则表达式是用于寻找和你定义的正则匹配的内容(具体可以参考:http://deerchao.net/tutorials/regex/regex.htm教程)

    另外,回答者只是给一个例子,并不确定你的字符串一定就是“(123,456)”

    (万一里边还有逗号和数字呢?)建议定义数组再说,比如:

    static void Main(string[] args) { string context = "(123,456)"; MatchCollection matchCollection = Regex.Matches(context, @"\d+");
    string[]values = new string[matchCollection.Count];
    int i=0; foreach (Match m in matchCollection) { values[i++] = m.ToString()); } }

    "\d"表示数字(只寻找数字)。@是取消“转义”用的

    (因为在C#中不能直接写一个\,某些符号在C#有特殊作用,
    否则视为错误)。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月10日 4:35
    版主

全部回复

  • 如果你所用a中的字符串格式一直是用逗号分割并且两端是数字的话,那么可以简单使用这种方式实现。

    请看:

            static void Main(string[] args)
            {
                string context = "(123,456)";
                MatchCollection matchCollection = Regex.Matches(context, @"\d+");
                foreach (Match m in matchCollection)
                {
                    Console.WriteLine(m.ToString());
                }
                Console.ReadKey();
                
                //输出:
                // 123
                // 456
            }





    2012年4月10日 1:06
  • 我是初学者,有点看不懂,能解释一下吗?

    我只要给二个变量赋值就可以了,不用输出的

    为什么m要转成字符串输出呢, 他原来的类型是?


    能解释一下@"\d+"吗?
    • 已编辑 shayulei 2012年4月10日 3:40
    2012年4月10日 3:30
  • 我只要给二个变量赋值就可以了,不用输出的

    简单解释:正则表达式是用于寻找和你定义的正则匹配的内容(具体可以参考:http://deerchao.net/tutorials/regex/regex.htm教程)

    另外,回答者只是给一个例子,并不确定你的字符串一定就是“(123,456)”

    (万一里边还有逗号和数字呢?)建议定义数组再说,比如:

    static void Main(string[] args) { string context = "(123,456)"; MatchCollection matchCollection = Regex.Matches(context, @"\d+");
    string[]values = new string[matchCollection.Count];
    int i=0; foreach (Match m in matchCollection) { values[i++] = m.ToString()); } }

    "\d"表示数字(只寻找数字)。@是取消“转义”用的

    (因为在C#中不能直接写一个\,某些符号在C#有特殊作用,
    否则视为错误)。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月10日 4:35
    版主
  • 还有 个问题

    为什么你是这么写的:string[]values = new string[matchCollection.Count];

    而不是string[matchCollection.Count] values;

    2012年4月10日 14:25
  • 还有 个问题

    为什么你是这么写的:string[]values = new string[matchCollection.Count];

    而不是string[matchCollection.Count] values;

    C#语法规定所致,这是语法问题。

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月11日 1:01
    版主