value = 'ad.41.bd'
if len(value) == len(value.strip({0,1,2,3,4,5,6,7,8,9})):
# no numbers
else:
# numbers present
有一种更简洁的方法可以在Python中检测字符串中的数字吗?
答案 0 :(得分:14)
这个怎么样?
import re
if not re.search('\d+', value):
# no numbers
else:
# numbers present
答案 1 :(得分:8)
>>> value="ab3asdf"
>>> any(c.isdigit() for c in value)
True
>>> value="asf"
>>> any(c.isdigit() for c in value)
False
>>> value = 'ad.41.bd'
>>> any(map(lambda c:c.isdigit(),value))
True
编辑:
>>> value="1"+"a"*10**6
>>> any(map(lambda c:c.isdigit(),value))
True
>>> from itertools import imap
>>> any(imap(lambda c:c.isdigit(),value))
True
地图花了1秒钟(在旧的python上) imap是即时的,因为imap返回一个生成器。请注意,在现实世界中,数字位于文件名末尾的概率较高。
答案 2 :(得分:4)
from string import digits
def containsnumbers(value):
return any(char in digits for char in value)
只是为了彻底:
任何(c.isdigit()):
>>> timeit.timeit('any(c.isdigit() for c in value)', setup='value = "abcd1"')
1.4080650806427002
任何(数字c):
>>> timeit.timeit('any(c in digits for c in value)', setup='from string import digits; value = "abcd1"')
1.392179012298584
re.search(1位或更多位数):
>>> timeit.timeit("re.search('\d+', value)", setup='import re; value = "abcd1"')
1.8129329681396484
re.search(停在一位数后):
>>> timeit.timeit("re.search('\d', value)", setup='import re; value = "abcd1"')
1.599431037902832
re.match(非贪婪):
>>> timeit.timeit("re.match(r'^.*?\d', value)", setup='import re; value = "abcd1"')
1.6654980182647705
re.match(贪婪):
>>> timeit.timeit("re.match(r'^.*\d', value)", setup='import re; value = "abcd1"')
1.5637178421020508
任何(地图()):
>>> timeit.timeit("any(map(lambda c:c.isdigit(),value))", setup='value = "abcd1"')
1.9165890216827393
任何(IMAP()):
>>> timeit.timeit("any(imap(lambda c:c.isdigit(),value))", setup='from itertools import imap;value = "abcd1"')
1.370448112487793
通常,较不复杂的regexp运行得更快。 c.isdigit()
和c in digits
几乎相同。 re.match
略快于re.search
。 map()
是最慢的解决方案,但imap()
是最快的(但在any(c.isdigit)
和any(c in digits)
的舍入误差范围内。
答案 3 :(得分:3)
您可以使用regular expression:
import re
# or if re.search(r'\d', value):
if re.match(r'^.*?\d', value):
# numbers present
else:
# no numbers
答案 4 :(得分:1)
if not any(c.isdigit() for c in value)
# no numbers
else:
# numbers present
答案 5 :(得分:1)
要检测数字中的符号,请使用?
运算符。
import re
if not re.search('-?\d+', value):
# no numbers
else:
# numbers present
答案 6 :(得分:0)
如果您想知道差异有多大,可以使用re.sub()
import re digits_num = len(value) - len(re.sub(r'\d','',value)) if not digits_num: #without numbers else: #with numbers - or elif digist_num == 3