我正在解析 C# 中的一些输入,并且我正在使用 RegEx 处理遇到问题。
免责声明:我不是正则表达式专家,但我正在学习更多。
我有一个如下所示的输入字符串:
ObjectType [property1=value1, property2=value2, property3=AnotherObjectType [property4=some value4]]
(一个人为的值,但重要的是这些可以嵌套)。
我正在执行以下操作来标记字符串:
Regex Tokenizer = new Regex(@"([=\[\]])|(,\s)");
string[] tokens = Tokenizer.Split(s);
这让我完成了大约 98% 的工作。这会将字符串拆分为已知的分隔符,逗号后跟一个空格。
上例中的标记是:
ObjectType
[
property1
=
value1
,
property2
=
value2
,
property3
=
AnotherObjectType
[
property4
=
some value4
]
]
但我有两个问题:
1) 属性值可以包含逗号。这是一个有效的输入:
ObjectType [property1=This is a valid value, and should be combined,, property2=value2, property3=AnotherObjectType [property4=value4]]
我希望 property1= 之后的令牌是:
This is a valid value, and should be combined,
我希望保留令牌内的空格。目前,它在找到逗号时被拆分。
2) 拆分时,逗号标记包含空格。如果可能的话,我想摆脱这个,但这是一个不太重要的优先事项。
我尝试了各种选择,但它们都让我部分实现了目标。我所拥有的最接近的是:
Regex Tokenizer = new Regex(@"([=\[\]])|(,\s)|([\w]*\s*(?=[=\[\]]))|(.[^=]*(?=,\s))");
为了匹配分隔符,逗号后跟空格,单词字符后跟文字前的空格,以及逗号和空格之前的文本(不包括 = 符号)。
当我得到匹配而不是调用 split 时,我得到了这个:
ObjectType
[
property1
=
value1
,
property2
=
value2
,
property3
=
AnotherObjectType
[
property4
=
value4
]
]
请注意属性 4 中缺少的信息。更复杂的输入有时会在令牌中包含右括号,如下所示: value4] 我不确定为什么会发生这种情况。关于如何改进这一点的任何想法?
谢谢,菲尔