gpt4 book ai didi

c# - Regex.Split 将空字符串添加到结果数组

转载 作者:行者123 更新时间:2023-11-30 16:25:40 25 4
gpt4 key购买 nike

我有一个正则表达式来拆分简单逻辑语句中的单词运算符和括号(例如“WORD1 & WORD2 | (WORD_3 & !word_4 )”。我想出的正则表达式是“(?[A-Za- z0-9_]+)|(?[&!\|()]{1})"。这是一个快速测试程序。


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;
}
}

正则表达式按照正确的顺序将单词和运算符拆分成一个数组,但结果数组包含许多空元素,我不明白为什么。这不是一个严重的问题,因为我在使用数组时只是忽略了空元素,但我希望 Regex 尽可能完成所有工作,包括忽略空格。

最佳答案

试试这个:

string[] splits = Regex.Split(removedSpaces, @"(?[A-Za-z0-9_]+)|(?[&!\|()]{1})").Where(x => x != String.Empty);

关于c# - Regex.Split 将空字符串添加到结果数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9600833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com