我有一个正则表达式可以在简单的逻辑语句中分割出单词运算符和括号(例如“WORD1 & WORD2 |(WORd_3 &!word_4)”。我提出的正则表达式是 “([A-ZA-Z0-9 _] +?)|(?[& \ |!(){1})” 这里是一个快速测试程序Regex.Split在结果数组中添加空字符串
using System;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("* Test Project *");
string testExpression = "!(LIONV6 | NOT_superCHARGED) &RHD";
string removedSpaces = testExpression.Replace(" ", "");
string[] expectedResults = new string[] { "!", "(", "LIONV6", "|", "NOT_superCHARGED", ")", "&", "RHD" };
string[] splits = Regex.Split(removedSpaces, @"(?[A-Za-z0-9_]+)|(?[&!\|()]{1})");
Console.WriteLine("Expected\n{0}\nActual\n{1}", expectedResults.AllElements(), splits.AllElements());
Console.WriteLine("*** Any Key to finish ***");
Console.ReadKey();
}
}
public static class Extensions
{
public static string AllElements(this string[] str)
{
string output = "";
if (str != null)
{
foreach (string item in str)
{
output += "'" + item + "',";
}
}
return output;
}
}
。
正则表达式完成将单词和运算符按正确顺序拆分为数组所需的工作,但结果数组包含ma是空的元素,我无法弄清楚为什么。它不是一个严重的问题,因为我在使用数组时忽略了空元素,但我希望Regex尽可能地完成所有工作,包括忽略空格。
你在哪里期待输入字符串中的空格去?你没有他们在你预期的阵列,但我不知道你在哪里摆脱他们在任何地方... – Chris 2012-03-07 12:04:25
@Chris没有空格,他用testExpression.Replace(“”,“”); – 2012-03-07 12:11:22
@DorCohen:啊,我真想知道我是否在密集。看起来我是。;-) – Chris 2012-03-07 12:13:30