Python-字符串操作的七大实例,实用版

文摘   科技   2024-04-20 19:45   北京  


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')    # 如果剩余字符串为空,返回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)}")

(左右滑动查看完整代码)

结果:



八、总结

以上实例均为小栈在实际工作中的总结,可能会有些方法并不是完全的通用。如果有同学在实际使用的过程中不完全适用,建议根据个人的实际场景加以优化

如果有更好的方式,欢迎留言共享,小栈也会学习和分享~




     

文章就分享到这儿,喜欢就点个吧!

推荐阅读  点击标题可跳转


ISEE小栈
没有花里胡哨,简单才是王道。
 最新文章