我试图自己创建正则表达式,但我无法做到。所以我希望得到一些帮助。我得到一个这样的字符串:
test=foo;test1=bar;test2=;test3= .some.other.stuff
我的正则表达式找到" ="
之后的值(?<=@test=).+?(?=;)
仅适用于
有人能帮助我吗?我总是需要&#34; =&#34;之后的值。如果没有价值,我需要一个&#34;空匹配&#34;。
更糟糕的是字符串的结尾是因为它没有&#34 ;;&#34;了。
答案 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]);
}