如何检查一个Python字符串是否包含一个数字

457 阅读15分钟

在python编程语言中,字符串被用来处理文本数据。有时,我们需要在验证用户输入或数据的情况下检查一个字符串是否包含一个数字。在这个Python教程中,我们将讨论检查一个给定的字符串是否包含一个数字的不同方法。

目录

  1. 使用ord()函数检查一个Python字符串是否包含一个数字
  2. 使用isnumeric()方法检查一个Python字符串是否是一个数字
  3. 使用isdigit()方法检验一个Python字符串是否包含一个数字
  4. 使用map()和any()函数检查一个Python字符串是否包含一个数字
  5. 使用正则表达式检查一个Python字符串是否包含一个数字
    1. 使用match()方法检验Python字符串是否包含一个数字
    2. 使用search()方法检查一个Python字符串是否包含一个数字
    3. 使用findall()方法检查一个Python字符串是否包含一个数字
  6. 结论

使用ord()函数检查一个Python字符串是否包含一个数字

在ASCII编码中,数字被用来表示字符。每个字符都被分配了一个0到127之间的特定数字。我们可以使用ord() 函数在Python中找到任何数字的ASCII值。

ord()函数将一个字符作为其输入参数并返回其ASCII值。你可以在下面的python代码中观察到这一点。

zero = "0"
nine = "9"
print("The ASCII value of the character \"0\" is:", ord(zero))
print("The ASCII value of the character \"9\" is:", ord(nine))

输出。

The ASCII value of the character "0" is: 48
The ASCII value of the character "9" is: 57

正如你在上面的python程序中看到的,字符 "0 "的ASCII值是48。另外,字符 "9 "的ASCII值是57。因此,任何数字字符的ASCII 值都在48和57之间。

我们可以使用数字字符的ASCII值来检查python中的字符串是否包含一个数字。为此,我们将把字符串视为一个字符序列。

之后,我们将按照下面提到的步骤进行。

  • 我们将使用for循环flag 变量来迭代原始字符串对象的字符。最初,我们将把flag 变量初始化为布尔值False
  • 之后,我们将遍历给定输入字符串的字符。在迭代过程中,我们将把每个字符转换为其ASCII数字值。
  • 之后,我们将检查数字值是否在48和57之间。如果是,该字符代表一个数字,因此我们可以说,该字符串包含一个整数值。
  • flag 一旦我们找到一个ASCII值在48和57之间的字符,我们将把布尔值True ,表明该字符串包含数字字符。在这里,我们已经发现该字符串包含一个数字。因此,我们将使用break语句从for循环中退出。
  • 如果我们在执行for循环时没有找到代表数字的字符,flag 变量将包含数值False

在执行for循环后,我们将检查flag 变量是否包含数值True 。如果是,我们将打印该字符串包含一个数字。否则,我们将打印出该字符串不包含任何数字。你可以在下面的代码中观察到这一点。

myStr = "I am 23 but it feels like I am 15."
flag = False
for character in myStr:
    ascii_val = ord(character)
    if 48 <= ascii_val <= 57:
        flag = True
        break
print("The string is:")
print(myStr)
print("String contains numbers?:", flag)

输出。

The string is:
I am 23 but it feels like I am 15.
String contains numbers?: True

如果你以一个空字符串作为输入来运行上面例子中给出的代码,程序会如期运行。因此,在执行for循环之前,将flag 变量初始化为False 是很重要的。否则,程序将无法正常工作。

使用 isnumeric() 方法检查一个 Python 字符串是否是一个数字

Python为我们提供了不同的字符串方法,我们可以用这些方法来检查一个字符串是否包含一个数字。isnumeric() 方法,当对一个字符串调用时,如果该字符串只由数字字符组成,则返回True 。如果字符串包含非数字字符,则返回False

我们可以使用isnumeric() 方法检查一个字符串是否只包含数字字符,如下面的例子所示。

myStr1 = "123"
isNumber = myStr1.isnumeric()
print("{} is a number? {}".format(myStr1, isNumber))
myStr2 = "PFB"
isNumber = myStr2.isnumeric()
print("{} is a number? {}".format(myStr2, isNumber))

输出。

123 is a number? True
PFB is a number? False

如果我们得到一个包含字母数字字符的字符串,你也可以使用isnumeric() 方法检查该字符串是否包含数字。为此,我们将使用for循环遍历原始字符串对象的字符。

  • 在迭代过程中,我们将对每个字符调用isnumeric() 方法。如果该字符代表一个数字, isnumeric() 方法将返回True 。因此我们可以说,该字符串包含一个数字。
  • 我们将把isnumeric() 方法返回的布尔值分配给flag 变量。
  • 如果flag 变量的值为True ,则表明该字符串包含数字字符。一旦我们发现字符串包含一个数字,我们将使用break语句退出for循环。
  • 如果我们在执行for循环时没有找到代表数字的字符,flag 变量将包含值False

如果在执行for循环后,flag 变量包含的值是False ,我们将说这个字符串包含数字。否则,我们将说该字符串不包含数字。你可以在下面的代码中观察到这一点。

myStr = "I am 23 but it feels like I am 15."
flag = False
for character in myStr:
    flag = character.isnumeric()
    if flag:
        break
print("The string is:")
print(myStr)
print("String contains numbers?:", flag)

输出。

The string is:
I am 23 but it feels like I am 15.
String contains numbers?: True

使用isdigit()方法验证一个Python字符串是否包含一个数字

我们可以使用isdigit() 方法来检查一个字符串是否是数字,而不是上一节中使用的isnumeric() 。当对一个字符串调用isdigit() 方法时,如果该字符串中的所有字符都是小数位,则返回True 。否则,它将返回False 。你可以在下面的例子中观察到这一点。

myStr1 = "1"
isDigit = myStr1.isdigit()
print("{} is a digit? {}".format(myStr1, isDigit))
myStr2 = "A"
isDigit = myStr2.isnumeric()
print("{} is a digit? {}".format(myStr2, isDigit))

输出。

1 is a digit? True
A is a digit? False

我们还可以使用 isdigit() 方法检查一个字符串是否包含数字。为此,我们将使用for循环遍历原始字符串对象的字符。

  • 在迭代过程中,我们将对每个字符调用isdigit() 方法。如果该字符代表一个数字,isdigit() 方法将返回True 。因此我们可以说,该字符串包含一个数字。
  • 我们将把isdigit() 方法返回的布尔值分配给flag 变量。如果flag 变量的值为True ,则表明该字符串包含数字字符。
  • 一旦我们发现字符串包含一个数字,我们将使用break语句退出for循环。
  • 如果我们在执行for循环时没有找到代表数字的字符,flag 变量将包含值False

如果在执行for循环后,flag 变量包含的值是False ,我们将说这个字符串包含数字。否则,我们将说该字符串不包含数字。

你可以在下面的代码中观察到这一点。

myStr = "I am 23 but it feels like I am 15."
flag = False
for character in myStr:
    flag = character.isdigit()
    if flag:
        break
print("The string is:")
print(myStr)
print("String contains numbers?:", flag)

输出。

The string is:
I am 23 but it feels like I am 15.
String contains numbers?: True

使用map()和any()函数检查一个Python字符串是否包含一个数字

在前面的章节中,我们使用了各种方法来检查一个Python字符串是否包含一个数字。为此,我们在每个例子中都使用for循环遍历了输入字符串。然而,我们也可以在不明确遍历字符串的情况下检查字符串是否包含一个数字。为此,我们将使用map() 函数。

map() 函数将一个函数作为其第一个输入参数,如func ,并将一个可迭代的对象如iter 作为其第二个输入参数。在执行过程中,它执行第一个输入参数中给出的函数func ,并将iter 中的元素作为func 的输入参数。执行后,它返回一个map对象,其中包含func 执行时返回的值,并将iter 中的元素作为输入参数。

你可以使用list() 构造函数将map对象转换成一个列表。

例如,请看下面的源代码。

from math import sqrt

numbers = [1, 4, 9, 16, 25]
print("The numbers are:", numbers)
square_roots = list(map(sqrt, numbers))
print("The square roots are:", square_roots)

输出。

The numbers are: [1, 4, 9, 16, 25]
The square roots are: [1.0, 2.0, 3.0, 4.0, 5.0]

在上面的代码中,我们将sqrt() 函数作为第一个输入参数,将一个包含正数的列表作为map() 函数的第二个参数。执行后,我们得到了一个包含输入列表中元素的平方根的列表。

为了使用map() 函数检查一个 python 字符串是否包含一个数字,我们将创建一个函数myFunc 。该函数myFunc 应该接受一个字符作为其输入参数。执行后,如果该字符是一个数字,它应该返回True 。否则,它应该返回False

myFunc ,我们可以使用isdigit() 方法来检查输入的字符是否是数字。

我们将把myFunc() 函数作为第一个参数,把输入字符串作为第二个输入参数传给map() 方法。执行后,map() 函数将返回一个map对象。

当我们把map对象转换成一个列表时,我们将得到一个布尔值的列表TrueFalse 。列表中数值的总数将等于输入字符串中的字符数。而且,每个布尔值都对应于字符串中相同位置的一个字符。换句话说,列表的第一个元素对应于输入字符串中的第一个字符,列表的第二个元素对应于输入字符串中的第二个字符,以此类推。

如果字符串中存在任何数字字符,输出列表中的相应元素将是True 。因此,如果从map对象得到的列表中至少有一个元素包含数值True ,我们将得出结论,输入字符串包含数字。

要想知道输出列表的元素是否包含数值True ,我们将使用函数any()

any() 函数将列表作为其输入参数,如果至少有一个值是True ,则返回True 。否则,它将返回False

因此,如果any() 函数执行后返回True ,我们将说,输入的字符串包含一个数字。否则,我们将得出结论,输入的字符串不包含数字字符。

你可以在下面的代码中观察到这一点。

def myFunc(character):
    return character.isdigit()


myStr = "I am 23 but it feels like I am 15."
flag = any(list(map(myFunc, myStr)))
print("The string is:")
print(myStr)
print("String contains numbers?:", flag)

输出。

The string is:
I am 23 but it feels like I am 15.
String contains numbers?: True

这个方法对较大的字符串也很有效,因为我们不需要逐个字符地遍历输入字符串。

你也可以不定义myFunc,而是向map()函数传递一个lambda函数。这将使你的代码更加简明。


myStr = "I am 23 but it feels like I am 15."
flag = any(list(map(lambda character: character.isdigit(), myStr)))
print("The string is:")
print(myStr)
print("String contains numbers?:", flag)

输出。

The string is:
I am 23 but it feels like I am 15.
String contains numbers?: True

你也可以不使用isdigit() 方法,而是使用 isnumeric() 方法,同时使用map() 函数和any() 函数来检查一个 python 字符串是否包含一个数字,如下例所示。

def myFunc(character):
    return character.isnumeric()


myStr = "I am 23 but it feels like I am 15."
flag = any(list(map(myFunc, myStr)))
print("The string is:")
print(myStr)
print("String contains numbers?:", flag)

输出。

The string is:
I am 23 but it feels like I am 15.
String contains numbers?: True

在前面几节中讨论的所有方法都使用了标准的字符串方法和字符串值。然而,python还为我们提供了正则表达式模块're'来处理文本数据和字符串。

现在让我们讨论如何使用正则表达式来检查一个Python字符串是否包含一个数字。

使用正则表达式检查一个Python字符串是否包含一个数字

正则表达式是用来处理Python中的文本数据的。我们也可以使用正则表达式来检查一个Python字符串是否包含一个数字。为此,我们可以使用match() 方法和search() 方法。让我们逐一讨论这两种方法。

使用match()方法验证一个Python字符串是否包含一个数字

match() 方法用于查找一个字符串中特定模式的第一次出现的位置。它把一个正则表达式模式作为它的第一个参数,把输入的字符串作为它的第二个参数。如果存在一个与正则表达式模式相匹配的字符串字符序列,它将返回一个匹配对象。否则,它返回 None。

要使用match() 方法检查一个字符串是否包含一个数字,我们将遵循以下步骤。

  • 首先,我们将定义数字的正则表达式模式。由于数字是一个或多个数字字符的序列,数字的正则表达式模式是“\d+”
  • 定义完模式后,我们将把模式和输入字符串传递给match() 方法。
  • 如果match() 方法返回None ,我们将说该字符串不包含任何数字。否则,我们将说该字符串包含数字。

你可以在下面的例子中观察到这一点。

import re

myStr = "23 but it feels like I am 15."
match_object = re.match(r"\d+", myStr)
print("The string is:")
print(myStr)
flag = False
if match_object:
    flag = True
print("String contains numbers?:", flag)

输出。

The string is:
23 but it feels like I am 15.
String contains numbers?: True

match() 方法只有在数字出现在字符串的开头时才有效。在其他情况下,它不能检查给定的字符串是否包含数字。你可以在下面的例子中观察到这一点。

import re

myStr = "I am 23 but it feels like I am 15."
match_object = re.match(r"\d+", myStr)
print("The string is:")
print(myStr)
flag = False
if match_object:
    flag = True
print("String contains numbers?:", flag)

输出。

The string is:
I am 23 but it feels like I am 15.
String contains numbers?: False

在上面的例子中,你可以看到字符串包含数字。然而,程序得出的结论是字符串中没有任何数字。为了避免在检查字符串中的数字时出现错误,我们可以使用search() 方法而不是match() 方法。

使用search()方法检查一个Python字符串是否包含一个数字

search() 方法用于查找一个字符串中特定模式的位置。它把一个正则表达式模式作为它的第一个参数,把输入的字符串作为它的第二个参数。如果存在一个与正则表达式模式相匹配的字符串字符序列,它将返回一个包含该模式第一次出现的位置的匹配对象。否则,它返回None

要使用search() 方法检查一个字符串是否包含一个数字,我们将遵循我们在match() 方法中使用的所有步骤。唯一不同的是,我们将使用search() 方法而不是match() 方法。你可以在下面的例子中观察到这一点。

import re

myStr = "I am 23 but it feels like I am 15."
match_object = re.search(r"\d+", myStr)
print("The string is:")
print(myStr)
flag = False
if match_object:
    flag = True
print("String contains numbers?:", flag)

输出。

The string is:
I am 23 but it feels like I am 15.
String contains numbers?: True

search() 方法在整个字符串中搜索。执行后,它返回一个匹配对象,该对象具有输入模式的第一次出现。因此,即使字符串中只有一个数字,search() 方法也会找到它。然而,对于match() 方法来说,情况并非如此。

使用findall()方法检查一个Python字符串是否包含一个数字

findall() 方法在语义上与 search() 方法相似。不同的是,findall() 方法返回模式的所有出现次数,而不是模式的第一次出现次数。当输入字符串中不存在模式时,findall() 方法返回None

你可以使用findall() 方法检查一个Python字符串是否包含一个数字,如下图所示。

import re

myStr = "I am 23 but it feels like I am 15."
match_object = re.findall(r"\d+", myStr)
print("The string is:")
print(myStr)
flag = False
if match_object:
    flag = True
print("String contains numbers?:", flag)

输出。

The string is:
I am 23 but it feels like I am 15.
String contains numbers?: True

结论

在这篇文章中,我们讨论了不同的方法来检查一个Python字符串是否包含一个数字。在所有这些方法中,使用正则表达式的方法是最有效的。如果我们谈及编写更多的pythonic代码,你可以使用map() 函数和any() 函数来检查一个字符串是否包含数字。 与字符串方法相比,正则表达式是一个更好的选择。因此,为了获得最佳的执行时间,你可以使用re.search() 方法来检查一个字符串是否包含一个数字。

我希望你喜欢阅读这篇文章。请继续关注更多内容丰富的文章。

学习愉快!