2015-11-23 3 views
0

Я пытаюсь проверить имя на python, чтобы просто использовать буквы верхнего и нижнего регистра, и я использую код, показанный ниже. Этот код работает и исключает что-либо лишнее в начале строки и числа в конце строки, однако он позволяет такие вещи, как «Олли @», и я не могу понять, почему. Любая помощь будет оценена по достоинству. ПриветствияPython Regular Expression - разрешать только верхние и нижние символы

MatchObjectForename = re.match(r"\b[a-zA-Z]+\b", self.txtForename.get()) 
print(MatchObjectForename) 
if MatchObjectForename == None: 
    Incorrect.append(self.txtForename) 
else: 
    Correct.append(self.txtForename) 
+0

Попробуйте изменить на 'r '[a-zA-Z] + $" '. Он работает сейчас? –

+1

Благодарю вас :) – OllieGidman

ответ

1

Согласно Python RegEx docs, \b «Совпадает с пустой строкой, но только в начале или в конце слова», что не то, что вы хотите. Это будет соответствовать «Ollie @», потому что «@» - «после окончания слова», а \b соответствует пустой строке между «e» и «@».

Попробуйте вместо r"[a-zA-Z]+$".

+0

Опять '' 'здесь избыточно. Проверьте ['re.match'] (https://docs.python.org/2/library/re.html#): * Если ноль или несколько символов ** в начале строки ** совпадают с шаблоном регулярных выражений, возвращает соответствующий экземпляр MatchObject. * –

+0

согласен. обновлено. – Itamar

0

\b указывает на начало или конец слова. В примере [email protected] конец Ollie считается окончанием слова.

Вы можете попробовать начать линию ^ и конец линии $anchors; ^[a-zA-Z]+$

+0

* Вы можете попробовать начать старт '^' * - почему? –

+0

Это предотвратило бы такое же возникновение в начале строки, то есть '@ Ollie' –

+0

Итак, что же делает' re.match'? –

0

@ не является символом слова, поэтому он считается границей слов. Вероятно, это считается особым символом или пунктуацией или чем-то еще. Если вы знаете, что будет текст до и после имени, вы можете сопоставить пробелы, которые могут быть \w в Python, не уверены. Если может быть что-то или что-то по обе стороны от имени, которое вам нужно, это будет усложняться. Вы можете использовать одно или два регулярных выражения, чтобы отделить мусор и последний, чтобы проанализировать действительное имя, если это необходимо.

0

От the documentation:

конец слова обозначается пробелом или не буквенно-цифровому, без символа подчеркивания Unicode

Так что вам нужен другой способ, чтобы указать конец слово.

1

Возможно, вы захотите захватить часть имени в такой группе: \b([a-zA-Z]+)\b и обратитесь к ней с помощью группы (1).

Смежные вопросы