gpt4 book ai didi

c# - 使用正则表达式匹配和拆分字符串

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

我想根据正则表达式验证输入字符串,然后拆分它。

输入字符串可以是字母A和字母A后跟一个感叹号的任意组合。例如,这些是有效的输入字符串:A, A!, AA, AA!, A!A, A!A!, AAA, AAA!, AA!A, A!AA, ... 任何其他字符都应产生无效匹配。

我的代码可能看起来像这样:

public string[] SplitString(string s)
{
Regex regex = new Regex(@"...");
if (!regex.IsMatch(s))
{
throw new ArgumentException("Wrong input string!");
}

return regex.Split(s);
}

我的正则表达式应该是什么样的?

编辑 - 一些例子:

  • 输入字符串“AAA”,函数应返回一个包含 3 个字符串(“A”、“A”、“A”)的数组
  • 输入字符串“A!AAA!”,函数应返回一个包含 4 个字符串的数组(“A!”、“A”、“A”、“A!”)
  • 输入字符串“AA!b”,函数应该抛出一个ArgumentException

最佳答案

似乎 Regex 在这里不是一个好的计划。看看这个:

private bool ValidString(string myString)
{
char[] validChars = new char[] { 'A', '!' };
if (!myString.StartsWith("A"))
return false;
if (myString.Contains("!!"))
return false;
foreach (char c in myString)
{
if (!validChars.Contains(c))
return false;
}
return true;
}

private List<string> SplitMyString(string myString)
{
List<string> resultList = new List<string>();
if (ValidString(myString))
{
string resultString = "";
foreach (char c in myString)
{
if (c == 'A')
resultString += c;
if (c == '!')
{
resultString += c;
resultList.Add(string.Copy(resultString));
resultString = "";
}
}
}
return resultList;
}

Regex 不是一个好的计划的原因是您可以在一些简单的 if 语句中编写逻辑,这些语句的编译和运行速度更快,成本更低。正则表达式也不太擅长为无限长度的字符串重复模式。您最终会写出很长的 Regex 或难以辨认的内容。

编辑在我的代码末尾,您将有一个 List<string>与您的问题中的拆分输入字符串一样。或者一个空的 List<string> .如果该要求对您非常重要,您可以稍微调整它以抛出 ArgumentException。或者你可以做一个 Count在列表中查看它是否成功。

关于c# - 使用正则表达式匹配和拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5688990/

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