正则表达式不适用于.NET

时间:2010-01-29 15:50:12

标签: c# .net regex

所以我试图匹配一个正则表达式,我在这方面相当新。我使用了验证器,它在我粘贴代码时有效,但在将它放在.NET2.0 C#页面的代码隐藏中时则无效。

违规代码应该能够在单个分号上分割,而不能在双分号上分割。但是,当我使用字符串

“条目; ENTRY2; entry3; entry4;”

我得到一个包含空值,上一个条目的最后一个字母和分号本身的无意义数组。在线javascript验证器正确分割它。请帮忙!

我的正则表达式:

((;;|[^;])+)

3 个答案:

答案 0 :(得分:5)

拆分以下正则表达式:

(?<!;);(?!;)

它表示匹配分号,这些分号既不在前面也不在另一个分号之后。

例如,此代码

var input = "entry;entry2;entry3;entry4;";
foreach (var s in Regex.Split(input, @"(?<!;);(?!;)"))
    Console.WriteLine("[{0}]", s);

产生以下输出:

[entry]
[entry2]
[entry3]
[entry4]
[]

最后一个空字段是输入结尾处分号的结果。

如果分号是每个字段末尾的终止符而不是连续字段之间的分隔符,则使用Regex.Matches代替

foreach (Match m in Regex.Matches(input, @"(.+?)(?<!;);(?!;)"))
    Console.WriteLine("[{0}]", m.Groups[1].Value);

获取

[entry]
[entry2]
[entry3]
[entry4]

答案 1 :(得分:1)

为什么不在分号上使用String.Split

string sInput = "Entry1;entry2;entry3;entry4";
string[] sEntries = sInput.Split(';');
// Do what you have to do with the entries in the array...

希望这有帮助, 最好的祝福, 汤姆。

答案 2 :(得分:1)

正如tommieb75所写,您可以将String.SplitStringSplitOptions枚举一起使用,这样您就可以控制新创建的拆分数组的输出

string input = "entry1;;entry2;;;entry3;entry4;;";
char[] charSeparators = new char[] {';'};
// Split a string delimited by characters and return all non-empty elements.
result = input.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);

结果只包含4个这样的元素:

<entry1><entry2><entry3><entry4>
相关问题