source

문자열에 숫자가 포함되어 있는지 확인합니다.

manysource 2022. 12. 24. 17:45

문자열에 숫자가 포함되어 있는지 확인합니다.

제가 찾은 질문의 대부분은 숫자의 글자를 찾는다는 사실에 치우친 반면, 저는 숫자 없는 문자열이 되고 싶은 숫자들을 찾고 있습니다.문자열을 입력하고 번호가 포함되어 있는지, 번호가 거부되는지 확인해야 합니다.

★★isdigit()되는 것은 「」입니다.True★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 숫자를 싶어서요. '알겠습니다'와 같은 요."I own 1 dog"아, 아, 아, 아, 아, 아, 아, 아, 아.

좋은 생각 있어요?

이렇게 함수와 함께 사용할 수 있습니다.

def has_numbers(inputString):
    return any(char.isdigit() for char in inputString)

has_numbers("I own 1 dog")
# True
has_numbers("I own no dog")
# False

또는 다음과 같은 정규 표현을 사용할 수 있습니다.

import re
def has_numbers(inputString):
    return bool(re.search(r'\d', inputString))

has_numbers("I own 1 dog")
# True
has_numbers("I own no dog")
# False

와 를 조합하여 사용할 수 있습니다.

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

Python str.isalpha()이 함수는 문자열 내의 모든 문자가 알파벳이고 적어도1개의 문자가 있으면 True를 반환하고 그렇지 않으면 False를 반환합니다.

Python Docs: https://docs.python.org/3/library/stdtypes.html#str.isalpha

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() 함수를 String 내의 모든 문자에 적용할 수 있습니다.또는 정규 표현을 사용할 수도 있습니다.

또한 "파이썬에서 문자열에 있는 하나의 숫자를 찾는 방법"을 찾았습니다.번호를 돌려줄 수 있는 아주 적절한 방법을 가지고 있습니다.아래의 해결책은 그 질문에 대한 답변에서 나온 것입니다.

number = re.search(r'\d+', yourString).group()

대체 방법:

number = filter(str.isdigit, yourString)

자세한 내용은 regex 문서를 참조하십시오.http://docs.python.org/2/library/re.html

편집: 부울 값이 아닌 실제 숫자를 반환합니다. 따라서 위의 답변이 귀하의 경우에 더 정확합니다.

첫 번째 메서드는 첫 번째 숫자와 그 이후의 연속된 숫자를 반환합니다.따라서 1.56이 반환되고 10,000이 반환되며 10. 0207-100-1000이 0207로 반환됩니다.

두 번째 방법은 작동하지 않습니다.

모든 숫자, 도트 및 쉼표를 추출하고 연속되지 않은 숫자를 잃지 않으려면 다음과 같이 사용합니다.

re.sub('[^\d.,]' , '', yourString)

도 이 에 대해 any ★★★★★★★★★★★★★★★★★」map:

def contains_digit(s):
    isdigit = str.isdigit
    return any(map(isdigit,s))

regexes를되어 있지 는 python 3에서 검색을 합니다). 그것은 루프를 포함하지 않기 때문이다(그리고 함수의 앨리어스는 그것을 찾는 것을 피한다).str

을 python 2로 map를 반환하다listbreaks이가 깨지고,any 시간

이것은 다음과 같이 실행할 수 있습니다.

if a_string.isdigit(): do_this() else: do_that()

https://docs.python.org/2/library/stdtypes.html#str.isdigit

「」를 사용합니다..isdigit()또, 리스트의 이해를 사용할 필요가 있는 경우(리스트의 이해를 실시할 수 없는 경우, 예외 처리(try/except)에 의존할 필요가 없습니다).

Python에서는 이것이 최선의 접근법은 아닐지도 모르지만 Haskeller로서는 이 람다/맵 접근법이 완벽하게 이해되고 매우 짧습니다.

anydigit = lambda x: any(map(str.isdigit, x))

물론 이름을 붙일 필요는 없다. 같이 할 수 .anydigit("abc123")★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★!

NLTK 방식을 사용할 수 있습니다.

텍스트에 '1'과 '1'이 모두 표시됩니다.

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.')

range with count를 사용하면 범위와 비교하여 문자열에 숫자가 표시되는 횟수를 확인할 수 있습니다.

def count_digit(a):
    sum = 0
    for i in range(10):
        sum += a.count(str(i))
    return sum

ans = count_digit("apple3rh5")
print(ans)

#This print 2
import string
import random
n = 10

p = ''

while (string.ascii_uppercase not in p) and (string.ascii_lowercase not in p) and (string.digits not in p):
    for _ in range(n):
        state = random.randint(0, 2)
        if state == 0:
            p = p + chr(random.randint(97, 122))
        elif state == 1:
            p = p + chr(random.randint(65, 90))
        else:
            p = p + str(random.randint(0, 9))
    break
print(p)

이 코드는 대문자, 소문자 및 숫자를 최소한 포함하는 크기 n의 시퀀스를 생성합니다.while 루프를 사용하여 이 이벤트를 보증했습니다.

any ★★★★★★★★★★★★★★★★★」ord다음과 같이 조합하여 목적에 부합할 수 있습니다.

>>> def hasDigits(s):
...     return any( 48 <= ord(char) <= 57 for char in s)
...
>>> hasDigits('as1')
True
>>> hasDigits('as')
False
>>> hasDigits('as9')
True
>>> hasDigits('as_')
False
>>> hasDigits('1as')
True
>>>

이 구현에 관한 몇 가지 포인트.

  1. any는 C 언어에서의 단락 표현과 같이 동작하며 결정되는 대로 결과를 반환하기 때문에 더 좋습니다. 즉, 문자열 'a1bbbbbc' 'b'와 'c'는 비교조차 되지 않는 경우입니다.

  2. ord' 또는 ' 사이의 체크 이 더 때문에 '0'은 '5'는 '5'는 '5'는 '5'는 '5'는 '5'는 '5'는 '5'는 '5'는 '5'보다 더 편리합니다.예를 들어 숫자 16진수 표현용 검증자를 쓰는 경우 문자열에는 'A' ~ 'F' 범위의 알파벳만 사용해야 합니다.

이거 어때요?

import string

def containsNumber(line):
    res = False
    try:
        for val in line.split():
            if (float(val.strip(string.punctuation))):
                res = True
                break
    except ValueError:
        pass
    return res

containsNumber('234.12 a22') # returns True
containsNumber('234.12L a22') # returns False
containsNumber('234.12, a22') # returns True

@zyxue의 답변을 좀 더 명확하게 하겠습니다.

RE_D = re.compile('\d')

def has_digits(string):
    res = RE_D.search(string)
    return res is not None

has_digits('asdf1')
Out: True

has_digits('asdf')
Out: False

이 솔루션은 @zyxue가 제시한 솔루션 중 가장 빠른 벤치마크를 가진 솔루션입니다.

또한 regex findall을 사용할 수도 있습니다.이 방법은 숫자의 길이를 더 잘 제어할 수 있기 때문에 더 일반적인 해결책입니다.최소 길이의 숫자가 필요한 경우 유용합니다.

s = '67389kjsdk' 
contains_digit = len(re.findall('\d+', s)) > 0

간단한 해결 방법은 다음과 같습니다.

s = '1dfss3sw235fsf7s'
count = 0
temp = list(s)
for item in temp:
    if(item.isdigit()):
        count = count + 1
    else:
        pass
print count
alp_num = [x for x in string.split() if x.isalnum() and re.search(r'\d',x) and 
re.search(r'[a-z]',x)]

print(alp_num)

알파벳과 숫자를 모두 포함하는 문자열이 모두 반환됩니다.isalpha()는 모든 숫자 또는 모든 문자를 포함하는 문자열을 반환합니다.

이것도 잘 될 거야.

if any(i.isdigit() for i in s):
    print("True")

반복적인 접근법입니다.숫자가 충족되지 않는 한 모든 문자를 사용합니다.의 두 번째 논거는next반복기가 "빈" 상태일 때 반환하도록 기본값을 수정합니다.이 경우 로 설정됩니다.False하지만 또한''로 부울값으로 캐스트되기 때문에 동작합니다.if.

def has_digit(string):
    str_iter = iter(string)
    while True:
        char = next(str_iter, False)
        # check if iterator is empty
        if char:
            if char.isdigit():
                return True
        else:
            return False

또는 생성기 이해의 첫 번째 항만 살펴봄으로써

def has_digit(string):
    return next((True for char in string if char.isdigit()), False)

아무도 python 연산자를 사용하지 않았다니 놀랍네요.in이것을 사용하면, 다음과 같이 동작합니다.

foo = '1dfss3sw235fsf7s'
bar = 'lorem ipsum sit dolor amet'

def contains_number(string):
    for i in range(10):
        if str(i) in list(string):
            return True
    return False

print(contains_number(foo)) #True
print(contains_number(bar)) #False

아니면 이 함수를 사용해서isdigit():

foo = '1dfss3sw235fsf7s'
bar = 'lorem ipsum sit dolor amet'

def contains_number(string):
    for i in list(string):
        if i.isdigit():
            return True
    return False

print(contains_number(foo)) #True
print(contains_number(bar)) #False

이러한 함수는 기본적으로 변환만 하면 됩니다.s목록에 숫자가 포함되어 있는지 확인합니다.만약 그렇다면, 그것은 돌아옵니다.True그렇지 않으면 반환됩니다.False.

set.intersection을 사용할 수도 있습니다.작은 문자열의 regex보다 훨씬 빠릅니다.

def contains_number(string):
    return True if set(string).intersection('0123456789') else False

언급URL : https://stackoverflow.com/questions/19859282/check-if-a-string-contains-a-number