如何将数字和减号运算符与正则表达式匹配?

时间:2013-09-22 05:10:47

标签: c# regex

事实上,我想在“??”之前和之后匹配的东西 我的代码如下:

//enter code here
        Regex r = new Regex(@"(?'value'[0-9\-\./TSE]{1,}) \?\?(?'index'[A-Za-z:]{1,}");
        string s=
@"39 ??Issue:
9 ??Pages:
1307-1325 ??DOI:
10.1109/TSE.2013.14 ??Published:";

正如你所看到的,我想要匹配这些东西:

value="39" index = "Issue:"
value="9" index = "Pages:"
value="1307-1325" index = "DOI:"
value="10.1109/TSE.2013.14" index = "Published:"

我认为只需更改正则表达式中的一个或两个字符即可解决此问题。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

如果你只是想要??之前和之后的信息,并且它总是采用那种格式(值??索引),那么Regex对此有点过分。只需使用String.Split

string s= @"39 ??Issue:
9 ??Pages:
1307-1325 ??DOI:
10.1109/TSE.2013.14 ??Published:";

string[] splitValues = s.Split(new string[] { "??", "\r\n" }, StringSplitOptions.None);

for (int i = 0; i < splitValues.Length; i += 2)
{
    Console.WriteLine("value={0} index={1}", splitValues[i].Trim(), splitValues[i + 1].Trim());
}

这会在??和换行符上分开,从而产生您正在寻找的输出:

value="39" index = "Issue:"
value="9" index = "Pages:"
value="1307-1325" index = "DOI:"
value="10.1109/TSE.2013.14" index = "Published:"

上面的编码将字符串拆分为??\r\n(行尾/换行符),产生一个元素数组,第一个元素是第一个值,第二个元素是第二个值,第三个元素是第二行的第一个值,第四个元素是第二行的第二个值,等等。

for循环很简单 - i += 2部分只是将循环计数器递增2(而不是通常的1 [i++]),因此它打印每行的值和索引在输入中。