#c# #regex
#c# #регулярное выражение
Вопрос:
Привет, я пытался получить точное регулярное выражение для сопоставления числа только с алфавитом, я попробовал это
Regex.IsMatch("1111", @"^[a-zA-Z0-9] $")
но результат верен.
Вот что я хочу вывести
12345678 -> False
abcdefgh -> False
ABCDEFGH -> False
1234abcd -> True
1234ABCD -> True
Комментарии:
1. Буквы всегда идут после цифр или они могут располагаться в любом порядке?
2. в любом порядке, по крайней мере, есть цифры и буквы.
Ответ №1:
Попробуйте следующее выражение, соответствующее положительному прогнозу:
^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9] $
Это подтверждает, что оба сгруппированных выражения истинны, и возвращает полную строку при совпадении.
Пример: https://regex101.com/r/GxPPt9/2
Ответ №2:
Это будет соответствовать любой строке, содержащей как цифры, так и буквы, в любом порядке:
^[[:alnum:]]*(([0-9][A-Za-z])|([A-Za-z][0-9]))[[:alnum:]]*$
Если вы хотите, вы могли бы заменить [[:alnum:]]
на [A-Za-z0-9]
, это может быть обязательным для того, чтобы заставить его работать в C #, смотрите Комментарии под этим ответом .
Попробуйте:https://regex101.com/r/yj9sWw/2
Комментарии:
1. Хорошо, теперь вы можете удалить бесполезные группы захвата и использовать группу без захвата для той, которая необходима.
2. Я просто понимаю, что .net не поддерживает классы символов POSIX, такие как
[:alnum:]
, поэтому вы должны написать[a-zA-Z0-9]
Ответ №3:
Я предлагаю подход без регулярных выражений, подсчитывающий количество буквенных символов и цифр:
bool ContainsOnlyDigitsAndLetters(string source)
{
int letters = myInput.Count(Char.IsLetter);
int numbers = myInput.Count(Char.IsDigit);
return letters != 0 amp;amp; numbers != 0 amp;amp; letters numbers == myInput.Length;
}
Это возвращает, true
если ваш inout перепутан, false, если он содержит либо только цифры, либо только буквы, либо если в строке есть символы, которые не являются ни тем, ни другим.
Ответ №4:
Вы также можете написать:
^(?>[0-9] |[a-zA-Z] )[a-zA-Z0-9] $
[0-9]+|[a-zA-Z]+)[a-zA-Z0-9]+$amp;i=0h» rel=»nofollow»>ДЕМОНСТРАЦИЯ
Здесь атомарная группа (?>...)
предотвращает возврат механизма регулярных выражений, поскольку квантификатор
является жадным, следующий символ, которому соответствует [a-zA-Z0-9]
, отличается от того, которому соответствует чередование. При [0-9]
успешном выполнении ветви первый символ, совпадающий с [a-zA-Z0-9]
, может быть только буквой, при [a-zA-Z]
успешном выполнении первый символ, совпадающий с [a-zA-Z0-9]
, может быть только цифрой.
Ответ №5:
Изменить
a-zA-Z0-9
Для
w d
@"^[w d ] $"
Редактировать:
Если числа всегда стоят перед символами так просто:
(d w )
Комментарии:
1. также
_
совпадает (w
соответствует любому символу слова (буквенно-цифровому и подчеркиванию)2. Регулярное выражение. IsMatch(«12345678″, @»^[ w d ] $») возвращает true, должно быть возвращено false
3. Ох. хорошо, извините, я неправильно понял 🙂 Отредактировано.
4.
(d w )
соответствует, например123