Regex-=直到;之后的值;
本文关键字:之后 Regex- 直到 | 更新日期: 2023-09-27 18:00:37
我试图自己创建Regex,但我做不到。所以我希望得到一些帮助。我得到这样的字符串:
test=foo;test1=bar;test2=;test3= .some.other.stuff
我的正则表达式用于查找"="之后的值
(?<=@test=).+?(?=;)
它只适用于
- @试验=
- test1=(并且仅当它在=之后有一个值时)
有人能帮我吗?我只需要"="后面的值,如果没有值,我需要一个"空匹配"。
更棘手的是字符串的末尾,因为它不再有";"。
除非解析代码的性能非常重要,否则Split
将生成可读性更强的代码:
var pairs = text
.Split(';')
.Select(v => v.Split('='))
.Select(pair=> new KeyValuePair<string, string>(pair[0], pair.Length==2? pair[1]:""));
Regex版本可能如下所示:
Regex.Matches("test=foo;test1=bar;test2=;test3= .some.other.stuff",
"([^=]+)=([^;]*)(?:;*)");
主要部分-指定最后一个;
字符为"可选非捕获组"-(?:;*)
。
只获取值:
[^;]+=(?<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
如果你只是做这样的事情(这里没有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]);
}