[python] 문자열에 숫자가 포함되어 있는지 확인

내가 찾은 대부분의 질문은 숫자로 된 문자를 찾고 있다는 사실에 편향되어있는 반면, 나는 숫자없는 문자열이되고 싶은 숫자를 찾고 있습니다. 문자열을 입력하고 숫자가 포함되어 있고 거부하는지 확인해야합니다.

이 함수 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()도하는 것은 의미 예외 처리에 의존하지 않아도 (지능형리스트 안에 수 없습니다 제외 / 시도)를 사용 목록 이해를 필요로하는 곳에 경우 (시도 / 제외).