Наклонная черта вправо в Python regex

Мой любимый отрывок. Окончательное в усладе для глаз Emacs:

;; real lisp hackers use the lambda character
;; courtesy of stefan monnier on c.l.l
(defun sm-lambda-mode-hook ()
  (font-lock-add-keywords
   nil `(("\\<lambda\\>"
   (0 (progn (compose-region (match-beginning 0) (match-end 0)
        ,(make-char 'greek-iso8859-7 107))
      nil))))))
(add-hook 'emacs-lisp-mode-hook 'sm-lambda-mode-hook)
(add-hook 'lisp-interactive-mode-hook 'sm-lamba-mode-hook)
(add-hook 'scheme-mode-hook 'sm-lambda-mode-hook)

, Таким образом, Вы видите т.е. следующее при редактировании шепелявости/схемы:

(global-set-key "^Cr" '(λ () (interactive) (revert-buffer t t nil)))
15
задан SilentGhost 29 October 2009 в 13:56
поделиться

4 ответа

Посмотрите здесь документацию по модулю Python re .

Я думаю, что это не / , а скорее - в вашем первом классе символов: [+ - /] соответствует + , / и любому значению ASCII между ними, что случается с включите запятую.

Возможно, этот совет из справочной документации:

Если вы хотите включить ']' или '-' внутри набора, поставьте перед ним обратную косую черту или поместите его как первый символ.

22
ответ дан 1 December 2019 в 01:38
поделиться

Вы говорите, чтобы заменить ноль или несколько косых черт на 'a' . Таким образом, он заменяет каждое «отсутствие символа» на 'a' . :)

Вы, вероятно, имели в виду [/] + , то есть одну или несколько косых черт.

РЕДАКТИРОВАТЬ: Прочтите ответ Бер , чтобы узнать о решении исходной проблемы. Я недостаточно внимательно прочитал вопрос.

8
ответ дан 1 December 2019 в 01:38
поделиться

r '[/] *' означает «Сопоставить 0 или более косых черт». Между 'b' и 'c' и между 'c' и 'ровно 0 косых черт. 'd'. Следовательно, эти совпадения заменяются на "а".

2
ответ дан 1 December 2019 в 01:38
поделиться

* соответствует своему аргументу ноль или более раз и, таким образом, соответствует пустой строке. Пустая строка (логически) находится между любыми двумя последовательными символами. Следовательно,

>>> import re
>>> re.sub(r'x*', 'a', 'bcd')
'abacada'

Что касается косой черты, она не подвергается специальной обработке:

>>> re.sub(r'/', 'a', 'b/c/d')
'bacad'

Документация описывает синтаксис регулярных выражений в Python. Как видите, косая черта не имеет специальной функции.

Причина, по которой [\ w \ d \ s + - / *] * также находит запятые, заключается в том, что внутри квадратных скобок стоит тире ] - обозначает диапазон . В этом случае вам нужны не все символы между + и / , а буквальные символы + , - и ] / . Поэтому пишите тире как последний символ: [\ w \ d \ s + / * -] * . Это должно исправить это.

2
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: