파이썬에서 문자열이 숫자를 포함하는지 확인하는 방법
이 기사에서는 파이썬 문자열에 숫자가 포함되어 있는지 확인하는 방법을 소개합니다.
파이썬 내장 any
함수는str.isdigit
과 함께 주어진 문자열에 숫자가 포함되어 있으면 True
를 반환합니다 그렇지 않으면False
를 반환합니다.
주어진 문자열에 숫자가 포함되어 있으면 패턴 r'\d'
를 가진 파이썬 정규 표현식 검색 방법은True
를 반환 할 수도 있습니다.
문자열에 숫자가 포함되어 있는지 확인하기위한str.isdigit
의 파이썬 any
함수
any
함수는 주어진iterable
의 요소가True
이면True
를 반환하고, 그렇지 않으면False
를 반환합니다.
str.isdigit()
는 주어진 문자열의 모든 문자가 숫자이면True
를, 그렇지 않으면False
를 반환합니다.
any(chr.isdigit() for chr in stringExample)
stringExample
에 최소한 숫자가 들어 있으면 stringExample
의 chr
에 대한chr.isdigit()
에iterable
에 적어도 하나의True
가 있으므로 위의 코드는True
를 반환합니다.
** 작업 예 **
str1 = "python1"
str2 = "nonumber"
str3 = "12345"
print(any(chr.isdigit() for chr in str1))
print(any(chr.isdigit() for chr in str2))
print(any(chr.isdigit() for chr in str3))
출력:
True
False
True
map()
함수
파이썬 map(function, iterable)
함수은 주어진iterable
의 모든 요소에function
을 적용하고 반복자를 반환합니다 위의 결과를 산출합니다.
따라서 위의 솔루션을 다음과 같이 다시 작성할 수 있습니다.
any(map(str.isdigit, stringExample))
** 작업 예 **
str1 = "python1"
str2 = "nonumber"
str3 = "12345"
print(any(map(str.isdigit, str1)))
print(any(map(str.isdigit, str2)))
print(any(map(str.isdigit, str3)))
출력:
True
False
True
re.search(r'\d')
문자열에 숫자가 포함되어 있는지 확인
re.search(r'\d', string)
패턴는string
을 스캔하고 일치하는 객체를 반환합니다 주어진 패턴과 일치하는 첫 번째 위치-\d
-0에서 9 사이의 숫자를 의미하며 일치하는 것이 없으면 ‘없음’을 반환합니다.
import re
print(re.search(r"\d", "python3.8"))
# output: <re.Match object; span=(6, 7), match='3'>
match 객체는match
의 시작과 끝 위치를 나타내는 2-tuple span
과match = '3'
과 같은 일치하는 내용을 포함합니다.
bool()
함수는re.search
결과를match
객체또는None
에서True
또는False
로 캐스트 할 수 있습니다.
** 작업 예 **
import re
str1 = "python12"
str2 = "nonumber"
str3 = "12345"
print(bool(re.search(r"\d", str1)))
print(bool(re.search(r"\d", str2)))
print(bool(re.search(r"\d", str3)))
출력:
True
False
True
런타임 측면에서 정규식 평가는 내장 문자열 함수를 사용하는 것보다 훨씬 빠릅니다. 문자열의 값이 상당히 크면 문자열 함수를 사용하는 것보다re.search()
가 더 최적입니다.
주어진 문자열에서search()
함수를 실행하기 전에re.compile()
을 사용하여 표현식을 컴파일하면 실행 시간이 더욱 빨라집니다.
compile()
의 반환 값을 변수에 넣고 해당 변수 내에서search()
함수를 호출합니다. 이 경우search()
는 단일 매개 변수, 즉 컴파일 된 표현식에 대해 검색 할 문자열 만 필요합니다.
def hasNumber(stringVal):
re_numbers = re.compile("\d")
return False if (re_numbers.search(stringVal) == None) else True
요약하면 내장 함수any()
와isdigit()
를 함께 사용하여 문자열에 숫자가 포함되어 있는지 확인할 수 있습니다.
그러나 정규 표현식 모듈re
내에서 유틸리티 함수search()
및compile()
을 사용하면 내장 된 문자열 함수보다 빠르게 결과가 생성됩니다. 따라서 큰 값이나 문자열을 다루는 경우 정규식 솔루션이 문자열 함수보다 훨씬 더 최적입니다.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook