2017-09-20 12 views
0

프로젝트 작업을하고 있으며 사용자가 입력 한 문자열이 영숫자인지 확인해야합니다. 지금은 코드를 만들었으며 단어가 영숫자인지 아닌지 확인해야하는 기능이 하나 있습니다. 프로그램은 사용자가 '221XBCS'와 같은 영숫자 인 라이센스 번호와 함께 문장을 입력하게합니다. 따라서 사용자가 221XBCS 대신 'My license number is 221124521'을 입력하면 프로그램을 중지하고 싶습니다. 그러나 현재 프로그램에서는 re.match 조건이 항상 true라고 가정합니다. 왜 그래야만하지??문장의 단어가 영숫자인지 확인하고 alnum 단어를 반환하십시오.

import re 
s = input("Please enter here:") 

if re.search(r'\bnumber \b',s): 
      x = (s.split('number ')[1]) 
      y = x.split() 
      z = y[0] 
      print(z) 
      if re.match('^[\w-]+$', z): 
       print('true') 
      else: 
       print('False') 

출력 지금은 다음과 같습니다

Please enter here:my license number is 221 
is 
true 

내가 내 프로그램은 입력에서 alnum 값을 잡아 싶어요. 그게 다야!

+0

'is'는'^ [\ w -] + $'와 (과) 일치합니다. 그러므로 사실입니다. 입력이 영숫자인지 확인해야하는 경우 isalnum()을 사용할 수도 있습니다. 하지만 하이픈을 지원해야한다는 것도 알기 때문에're.search (r "\ bnumber \ s + ([\ -] +)", s)'를 사용하면 안되며, 일치하면'그룹 (1)'가치? –

+0

'내 면허 번호 22184849'라고 입력 한 경우에도 조건에 해당됩니다. 내가 're.search (r "\ bnumber \ s + ([\ w -] +)"를 사용하면 AttributeError :'str '객체에'group '속성이 없습니다. –

+0

@TarakShah, 조건을 정교하게 작성하십시오. '숫자'라는 단어는 필수입니까? – RomanPerekhrest

답변

0

은 내가 당신의 상태를 이해 생각 : 내장 함수와

:

s = input("Please enter here:") 
l_numbers = list(filter(lambda w: not w.isdigit() and not w.isalpha() and w.isalnum(), s.strip().split())) 
l_number = l_numbers[0] if l_numbers else '' 

print(l_number) 
사용자는 알파벳 문자 번호 (모두)를 포함해야하는 자신의 라이센스 번호를 입력해야합니다

사용자가 입력했다고 가정 해 봅시다. My license number is 221XBCS thanks.
출력

221XBCS 
+0

감사합니다. –

+0

@TarakShah, 대단히 영광입니다. – RomanPerekhrest

0

정규식을 사용하면 문제를 역으로 볼 때 유용합니다. 이 경우 문자열이 영숫자인지 아닌지 순수한 숫자가 아닌지 확인하는 것이 좋습니다.

 if re.match('[^\d]', z): 
      print('The string is no a pure numerical') 
+0

나를 위해 일하지 않습니다. 이 코드는 '221xncnd22'와 같은 라이센스의 alnum 값을 감지하기를 원합니다. re.match ('[^ \ d]', z)를 사용합니다. 여기에 입력하십시오 : 내 라이센스 번호는 다음과 같습니다. 221xx 문자열이 어떤 입력에 대해서도 순수한 숫자가 아닙니다. –

+0

문장에없는 내용을 찾으려면 공백을 찾습니다. 문장 안의 라이센스 번호를 찾으려면 고정 숫자를 찾으십시오. 여기에 8 자로 된 문자가 있습니다. /(^ |) ([a-zA-Z0-9] {8}) (| $)/ –

+0

감사합니다. –