Регулярное выражение для не-алфавитов и нецифр

Пожалуйста, предоставьте решение для написания регулярного выражения следующим образом на C#.NET: мне потребуется регулярное выражение для неалфавитов (от a до z; от A до Z) и нечисловых (от 0 до 9). Имеется в виду обратный способ получения регулярного выражения, отличного от алфавита и другого, чем цифры (от 0 до 9).

Пожалуйста, предложите решение для того же.


person sukumar    schedule 18.11.2009    source источник


Ответы (3)


Вы можете использовать класс символов с отрицательным знаком здесь:

[^a-zA-Z0-9]

Вышеупомянутое регулярное выражение будет соответствовать одному символу, который не может быть латинской строчной или прописной буквой или цифрой.

^ в начале класса символов (часть между [ и ]) отменяет полный класс, так что он соответствует всему, не в классе, вместо обычного класса символов поведение.

Чтобы сделать его полезным, вы, вероятно, захотите один из них:

  1. Ноль или более таких символов

    [^a-zA-Z0-9]*
    

    Звездочка (*) здесь означает, что предыдущая часть может повторяться ноль или более раз.

  2. Один или несколько таких символов

    [^a-zA-Z0-9]+
    

    Плюс (+) здесь означает, что предыдущую часть можно повторить один или несколько раз.

  3. Полная (возможно, пустая) строка, состоящая только из таких символов

    ^[^a-zA-Z0-9]*$
    

    Здесь символы ^ и $ имеют значение привязки, соответствующие началу и концу строки соответственно. Это гарантирует, что вся строка состоит из символов, не входящих в этот класс символов, и никакие другие символы не следуют перед ними или после них.

  4. Полная (непустая) строка, состоящая только из таких символов

    ^[^a-zA-Z0-9]+$
    

Немного уточнив, это не будет (и не может) гарантировать, что вы не будете использовать никаких других персонажей, возможно, из других сценариев. Строка аеΒ будет полностью допустима с приведенным выше регулярным выражением, потому что она использует буквы греческого языка и кириллицы. Кроме того, есть и другие подводные камни. Строка á пройдет выше регулярного выражения, а строка ́a — нет (поскольку она строит букву á из буквы а и комбинированного диакритического знака).

Так что к отрицательным классам персонажей нужно относиться с осторожностью.

Я также могу использовать цифры из других шрифтов, если захочу: ١٢٣ :-)

Вы можете использовать класс символов

[^\p{L&}\p{Nd}]

если вам нужно позаботиться о вышеперечисленных вещах.

person Joey    schedule 18.11.2009

просто отрицайте класс:

[^A-Za-z0-9]

person beggs    schedule 18.11.2009
comment
Спасибо. Спасибо. Спасибо. Спасибо. :) - person sukumar; 18.11.2009
comment
Упс... Память пальцев. :-( исправлено :-) - person beggs; 18.11.2009

Чтобы выполнить локальную настройку, используйте:

[^[:alnum:]]
person Chen Levy    schedule 18.11.2009
comment
К сожалению, это ужасно для .NET, поскольку они не поддерживают выражения скобок POSIX. Согласно regular-expressions.info/posixbrackets.html выражение [\p{L&}\p{Nd}] является возможной заменой для разновидностей RE, поддерживающих Unicode. - person Joey; 18.11.2009