Python 字符串处理及判断字符串是否是数字

字符串

格式化

f-string

f-string 是 Python 3.6 之后引入的一种新的字符串格式化方法,它允许在字符串中嵌入表达式,这些表达式在运行时将被其值替换。

1
2
3
name = "zhangsan"

print(f"name:{name}")

format

我们可以使用 format() 方法对结果进行格式化。

1
2
3
4
name = "Alice"
age = 30
result = "Name: {}, Age: {}".format(name, age)
print(result) # 输出: Name: Alice, Age: 30

索引号

您可以使用索引号(花括号 {0} 内的数字)来确保将值放在正确的占位符中:

1
2
3
4
5
quantity = 3
itemno = 567
price = 52
myorder = "I want {0} pieces of item number {1} for {2:.2f} dollars."
print(myorder.format(quantity, itemno, price))

此外,如果要多次引用相同的值,请使用索引号:

1
2
3
4
age = 63
name = "Bill"
txt = "His name is {1}. {1} is {0} years old."
print(txt.format(age, name))

命名索引

您还可以通过在花括号 {carname} 中输入名称来使用命名索引,但是在传递参数值 txt.format(carname = “Ford”) 时,必须使用名称:

1
2
myorder = "I have a {carname}, it is a {model}."
print(myorder.format(carname = "Porsche", model = "911"))

原始字符串

字符串前面的字母 rR表示一个原始字符串(raw string)。

原始字符串中的反斜杠(\)不会被作为转义字符处理,而是被当作字符串的一部分直接包含在内。

例如:

普通的字符串:

1
s = "C:\\path\\to\\file"

在这个字符串中,反斜杠(\)被用作转义字符,所以实际的字符串内容是 C:\path\to\file

原始字符串:

1
s = r"C:\path\to\file"

在这个字符串中,反斜杠不会被作为转义字符处理,所以实际的字符串内容是 C:\path\to\file

时间字符串

在 Python 中,你可以使用 strftime 方法将时间格式化为字符串。strftimedatetime 模块中的一个方法,它允许你根据指定的格式将 datetime 对象转换为字符串。

以下是一个简单的示例,展示如何将当前时间格式化为字符串:

1
2
3
4
5
6
7
8
9
from datetime import datetime

# 获取当前时间
now = datetime.now()

# 将时间格式化为字符串
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")

print("格式化后的时间:", formatted_time)

在这个示例中,strftime 方法的参数 "%Y-%m-%d %H:%M:%S" 指定了输出的格式:

  • %Y:四位数的年份(例如:2023)
  • %m:两位数的月份(01 到 12)
  • %d:两位数的日期(01 到 31)
  • %H:两位数的小时(24 小时制,00 到 23)
  • %M:两位数的分钟(00 到 59)
  • %S:两位数的秒数(00 到 59)

你可以根据需要调整格式字符串。例如,如果你只想显示日期,可以使用 "%Y-%m-%d"

以下是一些常见的格式化代码:

  • %a:缩写的星期几名称(例如:Mon)
  • %A:完整的星期几名称(例如:Monday)
  • %b:缩写的月份名称(例如:Jan)
  • %B:完整的月份名称(例如:January)
  • %I:两位数的小时(12 小时制,01 到 12)
  • %p:AM 或 PM

数组拼接字符串

1
2
3
4
5
6
# 定义一个包含字符串的列表
words = ["Hello", "World", "Python"]

# 使用 join() 方法拼接
result = " ".join(words) # 用空格拼接
print(result) # 输出: Hello World Python

以什么开始

1
2
3
4
s = "Hello, world!"
print(s.startswith("Hello")) # True
print(s.startswith("He")) # True
print(s.startswith("hello")) # False

其它方法

Python 有一组可以在字符串上使用的内建方法。

注释:所有字符串方法都返回新值。它们不会更改原始字符串。

方法 描述
capitalize() 把首字符转换为大写。
casefold() 把字符串转换为小写。
center() 返回居中的字符串。
count() 返回指定值在字符串中出现的次数。
encode() 返回字符串的编码版本。
endswith() 如果字符串以指定值结尾,则返回 true。
expandtabs() 设置字符串的 tab 尺寸。
find() 在字符串中搜索指定的值并返回它被找到的位置。
format() 格式化字符串中的指定值。
format_map() 格式化字符串中的指定值。
index() 在字符串中搜索指定的值并返回它被找到的位置。
isalnum() 如果字符串中的所有字符都是字母数字,则返回 True。
isalpha() 如果字符串中的所有字符都在字母表中,则返回 True。
isdecimal() 如果字符串中的所有字符都是小数,则返回 True。
isdigit() 如果字符串中的所有字符都是数字,则返回 True。
isidentifier() 如果字符串是标识符,则返回 True。
islower() 如果字符串中的所有字符都是小写,则返回 True。
isnumeric() 如果字符串中的所有字符都是数,则返回 True。
isprintable() 如果字符串中的所有字符都是可打印的,则返回 True。
isspace() 如果字符串中的所有字符都是空白字符,则返回 True。
istitle() 如果字符串遵循标题规则,则返回 True。
isupper() 如果字符串中的所有字符都是大写,则返回 True。
join() 把可迭代对象的元素连接到字符串的末尾。
ljust() 返回字符串的左对齐版本。
lower() 把字符串转换为小写。
lstrip() 返回字符串的左修剪版本。
maketrans() 返回在转换中使用的转换表。
partition() 返回元组,其中的字符串被分为三部分。
replace() 返回字符串,其中指定的值被替换为指定的值。
rfind() 在字符串中搜索指定的值,并返回它被找到的最后位置。
rindex() 在字符串中搜索指定的值,并返回它被找到的最后位置。
rjust() 返回字符串的右对齐版本。
rpartition() 返回元组,其中字符串分为三部分。
rsplit() 在指定的分隔符处拆分字符串,并返回列表。
rstrip() 返回字符串的右边修剪版本。
split() 在指定的分隔符处拆分字符串,并返回列表。
splitlines() 在换行符处拆分字符串并返回列表。
startswith() 如果以指定值开头的字符串,则返回 true。
strip() 返回字符串的剪裁版本。
swapcase() 切换大小写,小写成为大写,反之亦然。
title() 把每个单词的首字符转换为大写。
translate() 返回被转换的字符串。
upper() 把字符串转换为大写。
zfill() 在字符串的开头填充指定数量的 0 值。

是否包含

1
2
3
4
5
6
7
8
# 定义字符串
text = "Hello, world!"

# 判断子字符串是否在主字符串中
if "world" in text:
print("子字符串 'world' 存在于主字符串中")
else:
print("子字符串 'world' 不存在于主字符串中")

判断是否为数字

在 Python 中,有多种方法可以判断一个字符串是否表示一个数字。

以下是几种常见的方法:

使用 str.isdigit()

str.isdigit() 方法用于检查字符串是否只包含数字字符。

1
2
3
4
5
6
7
def is_number_with_isdigit(s):
return s.isdigit()

print(is_number_with_isdigit("123")) # True
print(is_number_with_isdigit("abc")) # False
print(is_number_with_isdigit("12.3")) # False
print(is_number_with_isdigit("-123")) # False

使用 str.isnumeric()

str.isnumeric() 方法类似于 isdigit(),但它对更多的数字字符(如全角数字、罗马数字等)也返回 True

1
2
3
4
5
6
7
def is_number_with_isnumeric(s):
return s.isnumeric()

print(is_number_with_isnumeric("123")) # True
print(is_number_with_isnumeric("abc")) # False
print(is_number_with_isnumeric("12.3")) # False
print(is_number_with_isnumeric("-123")) # False

使用 try-except 结构

这种方法尝试将字符串转换为浮点数或整数,如果转换成功则表示字符串是一个数字。

1
2
3
4
5
6
7
8
9
10
11
def is_number_with_try(s):
try:
float(s)
return True
except ValueError:
return False

print(is_number_with_try("123")) # True
print(is_number_with_try("abc")) # False
print(is_number_with_try("12.3")) # True
print(is_number_with_try("-123")) # True

使用正则表达式

通过正则表达式来匹配数字。

1
2
3
4
5
6
7
8
9
10
import re

def is_number_with_regex(s):
pattern = r"^-?\d+(\.\d+)?$"
return bool(re.match(pattern, s))

print(is_number_with_regex("123")) # True
print(is_number_with_regex("abc")) # False
print(is_number_with_regex("12.3")) # True
print(is_number_with_regex("-123")) # True

总结

  • str.isdigit()str.isnumeric() 适用于简单的整数检查。
  • try-except 结构适用于检查浮点数和整数。
  • 正则表达式方法提供了最大的灵活性,可以匹配各种形式的数字。