내가 찾은 대부분의 질문은 숫자로 된 문자를 찾고 있다는 사실에 편향되어있는 반면, 나는 숫자없는 문자열이되고 싶은 숫자를 찾고 있습니다. 문자열을 입력하고 숫자가 포함되어 있고 거부하는지 확인해야합니다.
이 함수 isdigit()
는 True
모든 문자가 숫자 인 경우 에만 반환 합니다. 사용자가 숫자를 입력했는지 확인하고 싶습니다 "I own 1 dog"
.
어떤 아이디어?
답변
당신은 사용할 수 있습니다 any
로, 기능을 str.isdigit
다음과 같이 기능
>>> def hasNumbers(inputString):
... return any(char.isdigit() for char in inputString)
...
>>> hasNumbers("I own 1 dog")
True
>>> hasNumbers("I own no dog")
False
또는 다음과 같이 정규식을 사용할 수 있습니다
>>> import re
>>> def hasNumbers(inputString):
... return bool(re.search(r'\d', inputString))
...
>>> hasNumbers("I own 1 dog")
True
>>> hasNumbers("I own no dog")
False
답변
any
및 의 조합을 사용할 수 있습니다 str.isdigit
.
def num_there(s):
return any(i.isdigit() for i in s)
True
문자열에 숫자가 있으면 함수가 반환 하고 그렇지 않으면를 반환 False
합니다.
데모:
>>> king = 'I shall have 3 cakes'
>>> num_there(king)
True
>>> servant = 'I do not have any cakes'
>>> num_there(servant)
False
답변
사용하다
str.isalpha ()
참조 : https://docs.python.org/2/library/stdtypes.html#str.isalpha
문자열의 모든 문자가 알파벳이고 하나 이상의 문자가 있으면 true를, 그렇지 않으면 false를 반환합니다.
답변
https://docs.python.org/2/library/re.html
정규식을 더 잘 사용해야합니다. 훨씬 빠릅니다.
import re
def f1(string):
return any(i.isdigit() for i in string)
def f2(string):
return re.search('\d', string)
# if you compile the regex string first, it's even faster
RE_D = re.compile('\d')
def f3(string):
return RE_D.search(string)
# Output from iPython
# In [18]: %timeit f1('assdfgag123')
# 1000000 loops, best of 3: 1.18 µs per loop
# In [19]: %timeit f2('assdfgag123')
# 1000000 loops, best of 3: 923 ns per loop
# In [20]: %timeit f3('assdfgag123')
# 1000000 loops, best of 3: 384 ns per loop
답변
문자열의 모든 문자에 isdigit () 함수를 적용 할 수 있습니다. 또는 정규식을 사용할 수 있습니다.
또한 파이썬에서 문자열에서 하나의 숫자를 어떻게 찾습니까? 숫자를 반환하는 매우 적절한 방법으로. 아래의 해결책은 그 질문에 대한 답변입니다.
number = re.search(r'\d+', yourString).group()
또는
number = filter(str.isdigit, yourString)
자세한 내용은 정규식 문서를 참조하십시오 : http://docs.python.org/2/library/re.html
편집 : 이것은 부울 값이 아닌 실제 숫자를 반환하므로 위의 답변이 귀하의 경우에 더 정확합니다
첫 번째 방법은 첫 번째 숫자와 그 이후의 연속 숫자를 반환합니다. 따라서 1.56은 1로 반환됩니다. 10,000은 10으로 반환됩니다. 0207-100-1000은 0207로 반환됩니다.
두 번째 방법은 작동하지 않습니다.
모든 숫자, 점 및 쉼표를 추출하고 비 연속 숫자를 잃지 않으려면 다음을 사용하십시오.
re.sub('[^\d.,]' , '', yourString)
답변
NLTK 방법을 사용할 수 있습니다.
텍스트에서 ‘1’과 ‘One’을 모두 찾습니다.
import nltk
def existence_of_numeric_data(text):
text=nltk.word_tokenize(text)
pos = nltk.pos_tag(text)
count = 0
for i in range(len(pos)):
word , pos_tag = pos[i]
if pos_tag == 'CD':
return True
return False
existence_of_numeric_data('We are going out. Just five you and me.')
답변
다음과 같이이를 수행 할 수 있습니다.
if a_string.isdigit():
do_this()
else:
do_that()
https://docs.python.org/2/library/stdtypes.html#str.isdigit
사용 .isdigit()
도하는 것은 의미 예외 처리에 의존하지 않아도 (지능형리스트 안에 수 없습니다 제외 / 시도)를 사용 목록 이해를 필요로하는 곳에 경우 (시도 / 제외).