python字符串查找、替换、移除空格字符

假设我们有一个关键词“智能音箱”,我们想通过这个关键词来查询它在  '智能音箱!#@@#我非常喜欢用智能音箱,#$#%智能音箱棒棒的,非常好用的,智能音箱真好玩#$%^^^智能音箱'  这样一段文字中相关联的文字,比如要截取出当前关键词出现的位置前后的五个字(去除标点符号),如果用python该如何实现呢?这里我们就会想到,需要用到哪些知识点:

1.字符串查找:
用法: str.find(str, beg=0, end=len(string))

参数:
str -- 指定检索的字符串,当只传入此参数时,默认查找在字符串里第一个出现的子串
beg -- 开始索引,默认为0。
end -- 结束索引,默认为字符串的长度。

返回值:
如果包含子字符串返回开始的索引值,否则返回-1。

2.字符串检索并替换 re.sub
用法:re.sub(pattern, repl, string, count=0, flags=0)

参数:
pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
flags : 编译时用的匹配模式,数字形式
前三个为必选参数,后两个为可选参数。

3.移除字符串头尾指定的字符(默认为空格)或字符序列
用法:str.strip([chars])
参数:chars -- 移除字符串头尾指定的字符序列。
返回值:
返回移除字符串头尾指定的字符序列生成的新字符串。

下面直接上代码:

import re

def test(keyWord,s,subStrLen):

    # 定义正则表达去除字符串里所有标点符号
    r = '[’!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~\n。!,]+'
    s = re.sub(r, '', s).strip()  # 同时去除字符串前后的空格

    # 当find中没有第二个参数起步下标时,默认计算第一个要查找的字符的下标
    n = s.find(keyWord)

    arr = []  # 将截取出的字符串保存在此数组中

    # 当find查找到要统计下标的字符时,返回字符所在下标,直到统计没有这个字符时,返回的下标为-1。
    while n != -1:
        # 如果查找到的下标小于需要截取的字符长度,则截取的首index取0
        if n < subStrLen:
            startStr = s[0: n]  # 截取出关键字前面的5个字符
        else:
            startStr = s[n-subStrLen: n]

        # 如果截取出的s不含有keyWord关键字,再统计(功能要求:不统计关键字带关键字本身的字符串)
        if len(startStr) > 0 and keyWord not in startStr:
            arr.append(startStr)

        # 截取出关键字后的5个字符
        endStr = s[n+len(keyWord): n+len(keyWord)+subStrLen]
        # 如果截取出的s不含有keyWord关键字,再统计
        if len(endStr) and keyWord not in endStr:
            arr.append(endStr)

        # 方案一:从当前统计到的下标 + subStrLen(即5)-1的位置开始,继续统计下标(不用考虑相邻关键字)
        n = s.find(keyWord, n + subStrLen - 1)

        # 方案二: 每次取完数据,则截取掉,防止相邻关键字之间的字符重复截取(根据自己需要,自行调整)
        # s = s[n+len(keyWord)+subStrLen:]
        # n = s.find(keyWord)

    print(arr)


if __name__ == '__main__':
    keyWord = '智能音箱'
    s = '智能音箱!#@@#我非常喜欢用智能音箱,#$#%智能音箱棒棒的,非常好用的,智能音箱真好玩#$%^^^智能音箱'
    subStrLen = 5  # 字符串截取长度
    test(keyWord, s, subStrLen)

随便写的一个小demo,如果以上对你有帮助,记得点赞哦~

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值