Python - как использовать re для соответствия целой строке
Я проверяю ввод текста пользователем, чтобы он принимал буквы, а не цифры. пока мой код отлично работает, когда я набираю число (например, 56), он предупреждает меня, что я должен писать только буквы, а когда я печатаю буквы, он ничего не возвращает (как и следовало бы делать). Моя проблема в том, что он принимает его, когда я начинаю с ввода букв, сопровождаемых цифрами, например. (S45). то, что он делает, это принять первую букву, но не всю строку. Мне нужно, чтобы он принял всю строку.
def letterCheck(aString):
if len(aString) > 0:
if re.match("[a-zA-Z]", aString) != None:
return ""
return "Enter letters only"
Ответы
Ответ 1
Привяжите его к началу и концу и сопоставьте один или несколько символов:
if re.match("^[a-zA-Z]+$", aString):
Здесь ^
привязывается к началу строки, $
до конца, а +
гарантирует соответствие 1 или более символов.
Лучше всего использовать str.isalpha()
. Не нужно добираться до здорового регулярного выражения молота здесь:
>>> 'foobar'.isalpha()
True
>>> 'foobar42'.isalpha()
False
>>> ''.isalpha()
False
Ответ 2
используйте границы вашей строки regex + raw для кодирования регулярного выражения, например:
r"^[a-zA-Z]+$"
Ответ 3
Вы можете использовать isalpha() в строке. Он возвращает true, если строка содержит только буквенные символы, иначе false.
if aString.isalpha():
do something
else:
handle input error
Ответ 4
если вы ищете красивые пифонические произведения, перейдите к isalpha и isdecimal:
str = u"23443434";
print str.isdecimal();
Ответ 5
Вопрос на миллион долларов. Мой пост был отклонен из-за этого поста. Но, похоже, информации недостаточно для успешного вывода.
Мне нужно использовать регулярное выражение, чтобы найти ЛЮБОЙ ровно пять символов, включая перевод строки. У меня есть это до сих пор:
five = "s6<\na"
m = re.match(r"^.{5}$+",six,re.DOTALL)
Это ошибка, которую я получаю:
File "q01d.py", line 10, in <module>
m = re.match(r"^.{5}$+",five,re.DOTALL)
sre_constants.error: nothing to repeat
Я не уверен, что именно мы здесь не так, но опубликую, если я решу это в промежутке.