Как получить полный список класса символов регулярного выражения Python для быстрого поиска определенного специального символа? - PullRequest
0 голосов
/ 29 сентября 2019

Этот питон doc дает полный список метасимволов

.^ $ * +?{} [] \ |()

Аналогично, есть ли страница, содержащая полный список классов символов?

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

Я выполнил поиск и не нашел канонический термин.

Если «классы символов» действительно относятся ко всем возможным символам Юникода, я хотел бы изменить свой вопрос как «удобный способ поиска»regex спецсимволы в python ".

Кажется, что регулярные-выражения.info называют это" Сокращенные классы символов "

Больше положительных примеров (которые я ищу)\d, \s, \S, \A и т.д .;отрицательные примеры (которые я не ищу): abcdefghijklmnopqrstuvwxyz0123456789

Я искал "класс символов" и "Классы сокращенных символов" в документации по Python и stackoverflow и не нашел то, что мне нужно.

Зачем мне это нужно?Когда я читаю раздел doc , такой как

Классы символов, такие как \ w или \ S (определены ниже), также принимаются внутри набора, хотя символы, которые онисоответствие зависит от того, действует ли режим ASCII или LOCALE.

Я хотел бы знать, что означает \w.Поиск в doc или google занял бы у меня некоторое время.Например, используя команду меню поиска chrome для этого документа, \w получает 41 результат.

Если есть список этих символов, я могу искать все, используя не более 2 операций поиска (нижний регистр икапитала).

Ответы [ 3 ]

2 голосов
/ 29 сентября 2019

Категории, видимые из оболочки

Код показывает все «КАТЕГОРИИ».Помеченные «IN» являются категориями символов (другие отмечают определенные точки среза между символами):

>>> from pprint import pprint
>>> import sre_parse

>>> pprint(sre_parse.CATEGORIES)
{'\\A': (AT, AT_BEGINNING_STRING),
 '\\B': (AT, AT_NON_BOUNDARY),
 '\\D': (IN, [(CATEGORY, CATEGORY_NOT_DIGIT)]),
 '\\S': (IN, [(CATEGORY, CATEGORY_NOT_SPACE)]),
 '\\W': (IN, [(CATEGORY, CATEGORY_NOT_WORD)]),
 '\\Z': (AT, AT_END_STRING),
 '\\b': (AT, AT_BOUNDARY),
 '\\d': (IN, [(CATEGORY, CATEGORY_DIGIT)]),
 '\\s': (IN, [(CATEGORY, CATEGORY_SPACE)]),
 '\\w': (IN, [(CATEGORY, CATEGORY_WORD)])

Записи с «CATEGORY» являются категориями символов

Это также отвечает на вопросиз того, что означает \w.Это «слово характер».См. Также: В регулярном выражении, что означает \ w *?

Категории, объясненные в документах

Это значение выводится print(re.__doc__).Здесь объясняется предполагаемое значение каждой категории:

The special sequences consist of "\\" and a character from the list
below.  If the ordinary character is not on the list, then the
resulting RE will match the second character.
    \number  Matches the contents of the group of the same number.
    \A       Matches only at the start of the string.
    \Z       Matches only at the end of the string.
    \b       Matches the empty string, but only at the start or end of a word.
    \B       Matches the empty string, but not at the start or end of a word.
    \d       Matches any decimal digit; equivalent to the set [0-9] in
             bytes patterns or string patterns with the ASCII flag.
             In string patterns without the ASCII flag, it will match the whole
             range of Unicode digits.
    \D       Matches any non-digit character; equivalent to [^\d].
    \s       Matches any whitespace character; equivalent to [ \t\n\r\f\v] in
             bytes patterns or string patterns with the ASCII flag.
             In string patterns without the ASCII flag, it will match the whole
             range of Unicode whitespace characters.
    \S       Matches any non-whitespace character; equivalent to [^\s].
    \w       Matches any alphanumeric character; equivalent to [a-zA-Z0-9_]
             in bytes patterns or string patterns with the ASCII flag.
             In string patterns without the ASCII flag, it will match the
             range of Unicode alphanumeric characters (letters plus digits
             plus underscore).
             With LOCALE, it will match the set [0-9_] plus characters defined
             as letters for the current locale.
    \W       Matches the complement of \w.
    \\       Matches a literal backslash.

Другие специальные группы символов

Помимо классов сокращенных символов, модуль sre_parse подробно описывает другие интересные группы символова также:

SPECIAL_CHARS = ".\\[{()*+?^$|"
REPEAT_CHARS = "*+?{"
DIGITS = frozenset("0123456789")
OCTDIGITS = frozenset("01234567")
HEXDIGITS = frozenset("0123456789abcdefABCDEF")
ASCIILETTERS = frozenset("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
WHITESPACE = frozenset(" \t\n\r\v\f")

ESCAPES = {
    r"\a": (LITERAL, ord("\a")),
    r"\b": (LITERAL, ord("\b")),
    r"\f": (LITERAL, ord("\f")),
    r"\n": (LITERAL, ord("\n")),
    r"\r": (LITERAL, ord("\r")),
    r"\t": (LITERAL, ord("\t")),
    r"\v": (LITERAL, ord("\v")),
    r"\\": (LITERAL, ord("\\"))
}

FLAGS = {
    # standard flags
    "i": SRE_FLAG_IGNORECASE,
    "L": SRE_FLAG_LOCALE,
    "m": SRE_FLAG_MULTILINE,
    "s": SRE_FLAG_DOTALL,
    "x": SRE_FLAG_VERBOSE,
    # extensions
    "a": SRE_FLAG_ASCII,
    "t": SRE_FLAG_TEMPLATE,
    "u": SRE_FLAG_UNICODE,
}
1 голос
/ 29 сентября 2019

Похоже, вы ищете все сокращенные классы символов, поддерживаемые модулем Python re.Такие вещи, как [abc], также подпадают под название «класс символов», хотя это может быть неочевидно из документов re, и было бы невозможно и бессмысленно пытаться составить полный список из них.

Класс символов - это синтаксис регулярных выражений для сопоставления одного символа, обычно путем указания того, что он принадлежит или не принадлежит некоторому набору символов.Синтаксис наподобие [abc] позволяет вам явно указать набор символов для сопоставления, в то время как классы сокращенных символов, такие как \d, являются сокращением для больших предопределенных наборов символов.

Модуль Python * re поддерживает 6 классов сокращенных символов: \d, который соответствует цифрам, \s, который соответствует пробелу, \w, который соответствует символам "слова", и \D, \S и \W, которые соответствуют любому символу \d,\s и \w не совпадают.То, какие символы считаются или не учитываются, зависит от того, используете ли вы строки Unicode или строки байтов и установлены ли флаги ASCII или LOCALE;см. re документы для получения дополнительной информации (и ожидайте разочарования из-за расплывчатых документов для \w).

Существует множество других последовательностей с обратным слешем с особым значением, но они не являются классами символов.Например, \b соответствует границе слова (или, если вы забыли использовать необработанные строки, оно интерпретируется как символ возврата на задний план до того, как движок регулярных выражений его увидит), но это не класс символов.

Другие реализации регулярных выражений могут поддерживать различные классы сокращенных символов, а их классы сокращенных символов могут соответствовать различным символам.Например, Perl имеет способ * на 1032 * больше из них, а Perl \w соответствует большему количеству символов, чем Python, как при объединении диакритических знаков.

0 голосов
/ 29 сентября 2019

Вы ищете string.printable или, возможно, filter(lambda x: not x.isalnum(), string.printable), который возвращает

!"#$%&\'()*+,-./:;<=>?@[\\]^_``{|}~ \t\n\r\x0b\x0c

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...