Соответствие строк с регулярными выражениями c #

1

Программе присваивается строка для имени ячейки в электронной таблице. Эта таблица может содержать ячейку с именем, которое начинается с буквы a-zA-Z_, это должно быть так, что-то еще недействительно. После первой буквы или подчеркивания может быть любая комбинация букв или символов подчеркивания. Например:

______35we3I Допустимое имя

123dfdf НЕ является допустимым именем.

Если эти строки существуют, я хочу создать исключение. Я новичок в регулярных выражениях, но это то, что я придумал, и это не работает, как я этого хочу.

@"[a-zA-Z_][a-zA-Z_|\d]*"

Когда второй пример передается в функции Regex.IsMatch возвращает true, потому что последняя половина выражения действительна. Есть ли способ начать с начала строки всегда?

Я должен сказать, что я попытался использовать {^}, чтобы выполнить вышеупомянутое условие, но он не принимает ничего, когда морковь там.

  • 1
    Мне кажется, хорошо, только что проверил это с добавлением начала и конца выражения: вот ссылка rubular.com/r/UMIcvl0olc
  • 1
    Авинаш дал хорошие советы. Я просто хочу кое-что добавить: для проверки своих регулярных выражений вы можете использовать конструктор регулярных выражений RadSoftware ( rad-software-regular-expression-designer.software.informer.com/… ), он очень мощный и, поскольку он встроен в .Net, он дает точно такую же опцию, что и классы регулярных выражений .Net.
Теги:

2 ответа

4
Лучший ответ

Вам нужно использовать стартовые и конечные якоря, и вам не нужно ставить | внутри класса символов. | внутри класса char будет соответствовать буквальный | символ.

@"^[a-zA-Z_][a-zA-Z_\d]*$"

Код:

String s = "123dfdf";
if (!Regex.IsMatch(s, @"^[a-zA-Z_][a-zA-Z_\d]*$")) {
Console.WriteLine("Error! Wrong format.");
}
else {
Console.WriteLine("Correct format.");
}

IDEONE

  • 0
    Огромное спасибо. Я предполагаю, что я просто использую неправильный сайт, чтобы проверить свое регулярное выражение.
2

Для тестирования вашего регулярного выражения у вас есть очень хороший сайт здесь.

Для вашего регулярного выражения вы хотите добавить валидатор числа в своем регулярном выражении:

@"^[0-9a-zA-Z_][a-zA-Z_\d]*"

с этим были подтверждены ваши две строки.

@"^[a-zA-Z_][a-zA-Z_\d]*"

с этим, только строка, начатая не числом, была проверена.

  • 2
    Оп не хочу, чтобы число присутствовало на первых порах.
  • 1
    ой, извините за мою ошибку, спасибо за ваш ответ: p
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню