ISEE小语
“人生没有太晚的开始,只有太早的放弃。你起步晚,未必没有好发展;你在人后,未必一直不如人。在原地侃侃而谈,未必有成绩;在途中全力以赴,一定有收获!”
——莫言
字符串操作在我们日常工作中会经常用到,无论你是做开发的,测试的,或是做数据分析的……等等,本次小栈将日常使用的实例做一次分享。
有需要的请收藏哟~
本次分享总概:
一、固定格式字符串中提取数字
二、无规则字符串中提取数字
三、按照分隔符提取子字符串
四、按照索引和切片提取子字符串
五、替换指定字符并组成新的句子
六、统计文本中标点符号的个数
七、判断指定字符的类型
一、固定格式字符串中提取数字
实例:提取一串数字中,指定数字之后的整数,例如91800002099, 91800012398,要求只保留2099、12398
def digits_format(params, designated_number):
# 首先将数字转换成字符串
num_str = str(params)
position = num_str.find(designated_number) + 3
remaining_digits = num_str[position:]
remaining_digits = remaining_digits.lstrip('0')
res = int(remaining_digits) if remaining_digits else 0
return res
number = [91800002099, 91800012398]
for num in number:
result = digits_format(num, '918')
print(f"{num} 提取最后的数字为:{result}")
(左右滑动查看完整代码)
结果:
二、无规则字符串中提取数字
实例:提取无规则字符串中的数字,例如abc91800002099@qq.com提取出91800002099,yy0012398nice提取出0012398、uu00q732s01提取出[00, 732, 01]
# 使用正则表达式来查找所有的数字串
def extract_numbers(params):
return re.findall(r'\d+', params)
# 示例
params_ = ['abc91800002099@qq.com', 'yy0012398nice', 'uu00q732s01']
for pa in params_:
result = extract_numbers(pa)
print(f"{pa} 中的数字是:{result}")
(左右滑动查看完整代码)
结果:
三、按照分隔符提取子字符串
实例1:通过空白字符,将字符串分隔开来,例如将“Yesterday is history, tomorrow is a mystery, but today is a gift. ”
# 如果没有给定分隔符,将默认使用空白字符分割
def split_string(s, delimiter=None):
return s.split(delimiter)
# 示例
print(split_string("Yesterday is history, tomorrow is a mystery, but today is a gift."))
(左右滑动查看完整代码)
结果:
实例2:通过指定的分隔符,将字符串分隔开来,
例如将“昨天是历史,明天是未知,而今天是礼物,这就是为什么它被称为现在。” 通过“,”号分隔开来。
def split_string(s, delimiter=None):
return s.split(delimiter)
# 示例
print(split_string("昨天是历史,明天是未知,而今天是礼物,这就是为什么它被称为现在。", ","))
(左右滑动查看完整代码)
结果:
实例3:正则表达式分割字符串
例如将“One, Two Three Four,Five.Six Seven,Eight, Nine Ten” 使用正则表达式分割字符串,每个空格、逗号或者句号都可以作为分割点。
def split_string2(source_s, re_s):
result = re.split(re_s, source_s)
return result
s = "One, Two Three Four,Five.Six Seven,Eight, Nine Ten"
parts = split_string2(s, '[ ,.]+')
print(f"原字符串:{s}")
print(f"新字符串:{parts}")
(左右滑动查看完整代码)
结果:
四、按照索引和切片提取子字符串
实例:将字符串中“Yesterday is history, tomorrow is a mystery, but today is a gift. ” 的Yesterday提取出来。
def get_string(s, before_index, last_index):
result = s[before_index:last_index]
return result
# 示例
example_word = "Yesterday is history, tomorrow is a mystery, but today is a gift."
print(f"例句中提取后的单词是:{get_string(example_word, 0, 9)}")
(左右滑动查看完整代码)
结果:
五、替换指定字符并组成新的句子
实例:将字符串中“Yesterday is history, tomorrow is a mystery, but today is a gift. ” 的“,”替换为“.”,并将每句的首字母大写,组成新的句子。
def replace_new_word(source_s, replace_s, new_s):
"""
:param source_s: 源字符串
:param replace_s: 替换的字符
:param new_s: 新字符
:return:
"""
# 替换逗号为句点
source_s = source_s.replace(replace_s, new_s)
# 分割字符串为列表,每个元素是一句
sentences = source_s.split(new_s)
# 将每句的首字母大写
sentences = [sentence.capitalize() for sentence in sentences]
# 重新组合字符串
result = new_s.join(sentences)
# 如果原字符串以句点结尾,确保结果也以句点结尾
if source_s.endswith(new_s):
result += new_s
return result
# 示例
example_word = "Yesterday is history, tomorrow is a mystery, but today is a gift."
print(f"分句并组成新的句子是:{replace_new_word(example_word, ', ', '. ')}")
(左右滑动查看完整代码)
结果:
可以看到将原来一个长句了分成了三个短句。
六、统计文本中标点符号的个数
实例:统计文本中【遭遇不顺心时,推卸责任、自我封闭都是不可取的方法,这样的态度对解决问题毫无用处,即使事后想采取措施去改变也于事无补了。有时候你会像一株敏感的含羞草,一旦感受到外界不好的刺激就把自己蜷缩起来,祈求能够逃避眼前的痛苦。可是这样做有用吗?困难没有克服,危险也没有消除,你总要再次面对世界,那时候又该如何呢?所以不要一味地逃避,向实干者学习一下,直面困难正视挫折,只要有心就一定能解决问题。】 使用到标点符号的个数。
def get_punctuation_count(s, punctuation):
# 统计标点符号数
count = sum(1 for char in s if char in punctuation)
return count
s = "遭遇不顺心时,推卸责任、自我封闭都是不可取的方法,这样的态度对解决问题毫无用处,即使事后想采取措施去改变也于事无补了。" \
"有时候你会像一株敏感的含羞草,一旦感受到外界不好的刺激就把自己蜷缩起来,祈求能够逃避眼前的痛苦。可是这样做有用吗?困难没有克服," \
"危险也没有消除,你总要再次面对世界,那时候又该如何呢?所以不要一味地逃避,向实干者学习一下,直面困难正视挫折,只要有心就一定能解决问题。"
# 标点符号列表
punctuation = ",,。?、"
result = get_punctuation_count(s, punctuation)
print(f"这段文字中所用到的标点符号的个数是:{result} 个")
(左右滑动查看完整代码)
结果:
七、判断指定字符的类型
实例:输入一个字符参数,判断其是什么类型。
# 判断字符的类型
def char_type(param):
"""
:param param: 需要判断的单个字符
:return: 字符的类型
"""
if param.isdigit():
return "数字"
elif param.isalpha():
return "字母"
elif param.isspace():
return "空白符"
else:
return "其他字符"
# 示例
s = 'a'
print(f"{s} 的数据类型是:{char_type(s)}")
s = '1'
print(f"{s} 的数据类型是:{char_type(s)}")
s = ' '
print(f"{s} 的数据类型是:{char_type(s)}")
s = '@'
print(f"{s} 的数据类型是:{char_type(s)}")
(左右滑动查看完整代码)
结果:
八、总结
以上实例均为小栈在实际工作中的总结,可能会有些方法并不是完全的通用。如果有同学在实际使用的过程中不完全适用,建议根据个人的实际场景加以优化。
如果有更好的方式,欢迎留言共享,小栈也会学习和分享~
文章就分享到这儿,喜欢就点个赞吧!