确定字符串是否以字母字符开头并包含数字
本文关键字:开头 字符 包含 数字 字符串 是否 | 更新日期: 2023-09-27 18:30:29
我正在制作一个infix evaluator
,其中合法标记包括:+,-,*,/,(,),非负整数,以及任何以一个或多个字母开头并以一个或多个数字结尾的字符串。
我正在尝试找到最有效的方法来确定给定的字符串是否以一个或多个字母开头并以一个或多个数字结尾。问题是alphabetical characaters must come before the numerical values
(例如 X1、XX1、X11)。但是,如果字符串包含类似于 1X、X1X、X#1 的内容,则输入无效。我知道这包含了许多可能性,我希望有一种方法可以简化它。
到目前为止,我已经研究了诸如字符串的Any
、 StartsWith
和EndsWith
函数等方法。我只是觉得有太多的可能性将其简化为简短的 lambda 表达式或单行。事实上,由于我们不一定保证任何类型的输入,因此似乎必须检查所有 N 个字符以确保满足这些条件。
以下是我到目前为止的代码。此代码包括根据正则表达式@"([()+*/-])"
分解输入字符串
public static string[] parseString(String infixExp)
{
/* In a legal expression, the only possible tokens are (, ),
* +, -, *, /, non-negative integers, and strings that begin
* with one or more letters and end with one or more digits.
*/
// Ignore all whitespace within the expression.
infixExp = Regex.Replace(infixExp, @"'s+", String.Empty);
// Seperate the expression based on the tokens (, ), +, -,
// *, /, and ignore any of the empty Strings that are added
// due to duplicates.
string[] substrings = Regex.Split(infixExp, @"([()+*/-])").Where(s => s != String.Empty).ToArray();
// Return the resulting substrings array such that it
// can be processed by the Evaluate function.
return substrings;
}
如果您有任何建议性的方法和/或任何参考资料,以便我可以解决此问题,请随时!
试试
char[] letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".ToCharArray();
char[] numbers = "1234567890".ToCharArray();
foreach(string s in infixExp.Split(' '))
{
if(letters.Contains(s[0]))
{
//do stuff
}
if(numbers.Contains(s[s.Length-1]))
{
//do more stuff
}
}
若要确定给定字符串是以一个或多个字母开头,还是以一个或多个数字结尾,可以使用 Regex
类中的静态IsMatch
函数。
Regex.IsMatch:
Indicates whether the regular expression finds a match in the input string.
然后,您可以将正则表达式 ^[A-Z]+[0-9]+$
作为方法的第二个参数。同样,如果您希望忽略大小写,则可以提供正则表达式选项RegexOptions.IgnoreCase
这将确保字符串输入以至少一个字符开头,后跟至少一个数字(例如 XX1、X3、XZ9)。
有关正则表达式语言的更多信息,请访问此链接。我希望这对将来的任何人都有帮助!