Я делаю infix evaluator
, в котором легальные маркеры включают в себя: +, -, *, /, (,), целые неотрицательные числа и любую строку, которая начинается с одной или несколькими буквами и заканчивается одной или несколькими цифрами.Определение, если строка начинается с алфавитного символа и содержит числовые цифры
Я пытаюсь найти наиболее эффективный способ определить, начинается ли заданная строка с одной или нескольких букв и заканчивается одной или несколькими цифрами. Уловкой является то, что alphabetical characaters must come before the numerical values
(например, X1, XX1, X11). Однако, если строка содержит что-то похожее на 1X, X1X, X # 1, тогда вход недействителен. Я знаю, что это множество возможностей, и я надеюсь, что есть способ его упростить.
До сих пор я исследовал методы, такие как String's Any
, StartsWith
и EndsWith
. Я просто чувствую, что есть слишком много возможностей, чтобы упростить это в короткое лямбда-выражение или однострочный. На самом деле, поскольку нам не обязательно гарантирован какой-либо вход, кажется, что все N символов должны быть проверены, чтобы обеспечить выполнение этих условий.
Ниже приведен код, который у меня есть. Этот код включает в себя нарушение ввода вздернуть на основе RegularExpression @"([()+*/-])"
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;
}
Если у вас есть какие-либо наводящие подходы и/или любые ссылки такие, что я мог бы решить эту проблему, пожалуйста, не стесняйтесь!
Я действительно не понимаю, почему это должно быть так сложно. Не будет ли трюк Regex '^ [A-Z] + [0-9] + $'? – spender
@spender или, возможно, даже '^ [a-zA-Z] + \\ d + $'. Из вопроса: «... определить, начинается ли заданная строка с одной или нескольких букв и заканчивается одной или несколькими цифрами». –
@spender Я думаю, мне нужно посмотреть документацию Regex немного лучше, потому что это работало как шарм! Благодарю. – Jonathan