正则表达式 - 值=之后;

时间:2015-07-01 17:11:11

标签: c# regex

我试图自己创建正则表达式,但我无法做到。所以我希望得到一些帮助。我得到一个这样的字符串:

test=foo;test1=bar;test2=;test3= .some.other.stuff

我的正则表达式找到" ="

之后的值
(?<=@test=).+?(?=;)

仅适用于

  1. @test =
  2. test1 =(并且只有在=之后有值)
  3. 有人能帮助我吗?我总是需要&#34; =&#34;之后的值。如果没有价值,我需要一个&#34;空匹配&#34;。

    更糟糕的是字符串的结尾是因为它没有&#34 ;;&#34;了。

3 个答案:

答案 0 :(得分:3)

除非性能是解析代码的主要关注点,否则Split会产生更易读的代码:

 var pairs = text
   .Split(';')
   .Select(v => v.Split('='))
   .Select(pair=> new KeyValuePair<string, string>(pair[0], pair.Length==2? pair[1]:""));

正则表达式版本可能如下所示:

Regex.Matches("test=foo;test1=bar;test2=;test3= .some.other.stuff",
   "([^=]+)=([^;]*)(?:;*)");

主要部分 - 将最后;个字符指定为&#34;可选的非捕获组&#34; - (?:;*)

答案 1 :(得分:1)

只获取值:

[^;]+=(?<val>[^;]*)

将输出

val: foo
val: bar
val: 
val:  .some.other.stuff

(是的,空的一个匹配,但字符串为"")。您可以使用+而不是模式中的*消除匹配。

为您提供密钥和值的更完整方法是

(?<key>[^;])+=(?<val>[^;]*)

输出

key: t
val: foo
key: 1
val: bar
key: 2
val: 
key: 3
val:  .some.other.stuff

答案 2 :(得分:0)

如果你只是做这样的事情(这里没有LINQ)怎么办:

string yourString = @"test=foo;test1=bar;test2=;test3=someotherstuff";
string[] temp = yourString.Split(';');

Dictionary<string, string> values = new Dictionary<string, string>();
for(int i = 0; i < temp.Length; i += 2) 
{
   var temp2 = temp[i].Split('=');
   values.Add(temp2[0], temp2[1]);
}