私が見つけた質問のほとんどは、彼らが数字で文字を探しているという事実に偏っていますが、私は無数の文字列になりたいもので数字を探しています。文字列を入力して、数字が含まれているかどうか、拒否されているかどうかを確認する必要があります。
関数isdigit()
はTrue
、すべての文字が数字の場合にのみ戻ります。ユーザーが数字などを入力したかどうかを確認したいだけです"I own 1 dog"
。
何か案は?
私が見つけた質問のほとんどは、彼らが数字で文字を探しているという事実に偏っていますが、私は無数の文字列になりたいもので数字を探しています。文字列を入力して、数字が含まれているかどうか、拒否されているかどうかを確認する必要があります。
関数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
r'-?\d+'
\d
範囲0
からまでの1桁のみに一致し9
ます。
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
any
ジェネレーター式を受け入れることに気づきました。
使用する
str.isalpha()
参照:https : //docs.python.org/2/library/stdtypes.html#str.isalpha
文字列のすべての文字がアルファベットで、少なくとも1つの文字がある場合はtrueを返し、それ以外の場合はfalseを返します。
'_'.isalpha()
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
None
文字列のすべての文字に関数isdigit()を適用できます。または、正規表現を使用することもできます。
また、Pythonで文字列内の1つの数値を検索するにはどうすればよいですか?非常に適切な方法で数値を返します。以下の解決策は、その質問の答えからです。
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として返されます。
2番目の方法は機能しません。
すべての数字、ドット、およびカンマを抽出し、連続しない数字を失わないようにするには、次を使用します。
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()
も手段例外処理に頼らないあなたがリストの内包(リストの内包の内側には不可能である除く試みを/)を使用する必要がある場合で(TRY /を除く)を。
rangeを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
Iは、誰が、この組み合わせをmentionnedていないことに驚いていますany
とmap
:
def contains_digit(s):
isdigit = str.isdigit
return any(map(isdigit,s))
python 3ではおそらくおそらく最も高速です(おそらく正規表現を除いて)それはループを含まないためです(そして関数のエイリアスはそれを調べないようにします str
)。)。
短絡を壊すをmap
返すので、Python 2 list
ではこれを使用しないでくださいany
これはどうですか?
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
より簡単な解決方法は
s = '1dfss3sw235fsf7s'
count = 0
temp = list(s)
for item in temp:
if(item.isdigit()):
count = count + 1
else:
pass
print count
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
>>>
この実装に関するいくつかのポイント。
any
これは、C言語の短絡式のように機能し、判別できるとすぐに結果を返します。つまり、文字列 'a1bbbbbbc'の場合、 'b'と 'c'は比較されません。
ord
「0」と「5」の間の小切手番号、またはその他の範囲のように、より柔軟性があるため、より優れています。たとえば、数値の16進数表現のバリデーターを作成する場合、文字列に 'A'から 'F'の範囲のアルファベットのみを含めることができます。