Python как проверить регуляркой, что строка состоит только из цифр/букв

надо чтоб так:

inp1 = '123русEng'
inp2= '!?-_07'

checkWithReg( inp1 )
>>> True

checkWithReg( inp2 )
>>> False

как checkWithReg должно выглядеть?


Ответы (2 шт):

Автор решения: Wiktor Stribiżew

re.fullmatch('[a-zA-Z0-9]', 'fgdf') возвращает False, так как в строке четыре буквы, а не одна: [a-zA-Z0-9] находит только одну букву или цифру.

Чтобы проверить, состоит ли строка целиком из букв или цифр, используйте

re.fullmatch(r'[a-zA-Z0-9]+', 'fgdf') # 0 и более цифр/букв
re.search(r'^[a-zA-Z0-9]*\Z', 'fgdf') # версия с re.search

re.fullmatch(r'[a-zA-Z0-9]*', 'fgdf') # 1 и более цифр/букв 
re.search(r'^[a-zA-Z0-9]*\Z', 'fgdf') # версия с re.search

Подробности

  • ^ - начало строки
  • [a-zA-Z0-9]* - 0 и более цифр/букв
  • [a-zA-Z0-9]+ - 1 и более цифр/букв
  • \Z - конец строки.
→ Ссылка
Автор решения: Fox Fox

Я не совсем понял условие. Что это значит: цифр/букв? "Цифр и букв" или "цифр или букв"? Это принципиально разные вещи. Я написал решение для "цифр и букв", исходя из содержимого переменных:

import os
import re
    
inp1 = '123русEng'
inp2= '!?-_07'
    
def checkWithReg(s): print(bool(re.match(r'^[\w]+$', s)))
    
checkWithReg(inp1)
checkWithReg(inp2)
    
os.system("pause > nul")
→ Ссылка