Вам нужно понять, что каждый раз, когда вы пишете шаблон, его сначала интерпретируют как строку перед тем, как читать и интерпретировать второй раз с помощью механизма регулярных выражений. Давайте расскажем, что происходит:
>>> s='\r'
s содержит символ CR.
>>> re.match('\r', s)
<_sre.SRE_Match object; span=(0, 1), match='\r'>
Здесь строка '\r'
представляет собой строку, содержащую CR, поэтому приводится литерал CR к движку регулярных выражений.
>>> re.match('\\r', s)
<_sre.SRE_Match object; span=(0, 1), match='\r'>
Строка теперь является буквальной обратной косой чертой и литералом r, механизм регулярных выражений принимает эти два символа, а так как \r
- это escape-последовательность регулярного выражения, которая также означает символ CR , вы также получаете совпадение.
>>> re.match('\\\r', s)
<_sre.SRE_Match object; span=(0, 1), match='\r'>
Строка содержит буквальный обратный слэш и литерал CR, механизм регулярных выражений получает \
и CR
, но поскольку \CR
не известен Последовательность escape-кода regex игнорируется, и вы получаете совпадение.
Обратите внимание, что для механизма регулярных выражений буквальная обратная косая черта - это escape-последовательность \\
(поэтому в строке шаблона r'\\'
или '\\\\'
)
Отличный совет, спасибо @Kukeltje за комментарий.
Я пошел немного дальше и установил delay="10000"
, чтобы всплывающее окно практически никогда не закрывалось автоматически при обычном взаимодействии с пользователем. Мои пользователи привыкли, что всплывающее окно не закрывается автоматически из-за стандартного поведения ввода даты и времени компонента <p:calendar />
в любом случае.
Это помогло мне.
Обновление
Может быть, 10 секунд - это не очень хорошая идея, потому что при ручном вводе даты также требуется 10 секунд для запуска проверки ...