正则表达式 - 用于从字符串中提取数据的各种正则表达式

时间:2013-04-08 06:10:37

标签: c# regex

我有以下代码

string s = "add(2,3);";
var matchess = Regex.Matches(s, @"\(\s*(?<num>\d+)\s*(\,\s*(?<num>\d+)\s*)*\)");
                var results = matchess.Cast<Match>()
                    .SelectMany(m => m.Groups["num"].Captures.Cast<Capture>())
                    .Select(c => c.Value).ToArray();

上面的代码检测到两个以上的functionname(number,number)输入,并将结果存储在arraylist中以便能够访问。

有没有办法以这样的方式改变方程式,它也会接受以下内容并相应地打印结果?

示例1

 string s = "add(2.2,3.3);";

结果1

results[0] = 2.2
results[1] = 3.3

示例2

string s = "add(2.4,3.5,6.7);";

结果2

    results[0] = 2.4
    results[1] = 3.5
    results[2] = 6.7

示例3

string s = "test("this is a test","just an example");";

结果3

results[0] = "this is a test"
results[1] = "just an example"

例4

 string s = "test("this is a test","just an example","testing");";

结果4

    results[0] = "this is a test"
    results[1] = "just an example"
    results[2] = "testing"

基本上我需要的是输入多于2个函数名(十进制,十进制)和&amp; functionname(string,string)并将结果存储在arraylist中以访问它们。

请指教。感谢

1 个答案:

答案 0 :(得分:1)

试试这个:

string s = "aa(1.2,3.5)";
    //Or
    string s = "aa(sad,asd)";
    var info = Regex.Split(
        Regex.Matches(s, @"\(.*?\)")
        .Cast<Match>().First().ToString()
        .Replace("(", string.Empty).
        Replace(")", string.Empty), @"[\s,]+");

工作原理:

首先我在()区域获取字符串:

Regex.Matches(s, @"\(.*?\)");

获得第一场比赛

.Cast<Match>().First().ToString()

删除()

.Replace("(", string.Empty).Replace(")", string.Empty)

,表单结果

之间拆分文本或数字
Regex.Split(result, @"[\s,]+");