Регулярное выражение, которое принимает только Excel-подобный диапазон ячеек строки или столбца - PullRequest
0 голосов
/ 27 марта 2019

Я хочу знать регулярное выражение, которое принимает только Excel-подобный диапазон ячеек строки или столбца в C #

Например,

A2: D2 - OK
A23: F23 - OK
A3: D6 - ошибка

или

A1: A12 - OK
A1: C1 - ошибка

1 Ответ

0 голосов
/ 28 марта 2019

Используя класс расширения, вы можете создать несколько тестов с помощью Regex и с кодом тестирования для проверки строк диапазона:

public static class ExcelRangeExt {
    static Regex excelRangeRE = new Regex(@"[A-Z]+[0-9]+:[A-Z]+[0-9]+", RegexOptions.IgnoreCase | RegexOptions.Compiled);
    static Regex betweenPosRE = new Regex(@"(?<=\p{L})(?=\d)", RegexOptions.Compiled);

    public static bool IsExcelRange(this string r) => excelRangeRE.IsMatch(r);
    public static bool IsExcelRowOrCol(this string r) {
        var valid = excelRangeRE.IsMatch(r);
        if (valid) {
            var splitr = r.Split(':').Select(s => betweenPosRE.Split(s)).ToList();
            valid = splitr[0][0] == splitr[1][0] // is column
                    || splitr[0][1] == splitr[1][1]; // is row
        }
        return valid;
    }
}

Таким образом, вы можете протестировать одну строку диапазона, вызвав IsExcelRowOrCol:

var valid = rangeStr.IsExcelRowOrCol();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...