Python去除字符串中固定字符或固定位置字符_如何去掉固定字符-程序员宅基地

技术标签: Python  

一、背景

  在C语言中输入十六进制的数组,如下面的代码,通常是带有逗号,以及0x的十六进制标志。而在CRC计算器中,输入数据进行识别的时候,应该去掉0x,有的时候还要去掉空格以及英文逗号,所以我们需要去除字符串中特定位置的字符。因为上位机是使用Python做的,所以引出本文内容:Python去除字符串中特定衣服或特定位置字符,本文中主要使用了replace函数pop函数

unsigned char test[8] = {
    0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xFF}

二、去除空格和逗号

Str_Input = self.Input.text()  # 读取输入 
Str_Input = Str_Input.replace(" ", "")  # 去掉空格
Str_Input = Str_Input.replace(",", "")  # 去掉逗号

  去掉空格和逗号的原理是使用replace函数把字符串中的" "及","替换为"",那么如何去除0x呢?

三、去除0x字符

  因为已经去除了空格和逗号,所以后面讨论的内容都是0x120x340x560x780x9A0xBC0xDE0xFF这种形式的,刚开始以为会有0x0x的出现,所以去除0x时不能使用replace函数直接替换0x避免把有效字符去掉;后面想到十六进制只有0-F,不可能有x的,所以是不会出现0x0x这个数,因为有效字符里面不可能包含字符0x。观察输入的规律,发现可以定点敲除。使用pop函数可以敲除字符串里的某一个字符。比如list_Str_Input.pop(1)是去除字符串中的索引为1的字符。观察去除了空格以及逗号留下来的字符串0x120x340x560x780x9A0xBC0xDE0xFF,可以发现每四个里面的后面两个是有效元素,所以我们只需要去除前两个字符即可以去掉0x

  原理:如果只有四个字符,比如’0x12’,有两种方法可以去除’0x’,即是先去除0或者先去除x。

3.1、先去除0

  对于0x12,首先要使用list函数为每一个字符分配一个索引,0对应索引0,x对应索引1,1对应索引2,2对应索3。先去除0之后,0x12变成x12,此时x的位置索引不再是1,而是0。新的索引位置变成了x对应索引0,1对应索引1,2对应索2。所以我们只需要对索引0去除两次即可。

list_Str_Input.pop(0)  # 剔除索引0即是剔除字符0
list_Str_Input.pop(0)  # 第二次剔除索引0是剔除字符x

3.2、先去除x

  先去除x,是去除索引1。去除x之后,’0x12‘变成’012‘,此时0的位置索引依然是0。新的索引位置变成了0对应索引0,1对应索引1,2对应索2。对应的代码是

list_Str_Input.pop(1)  # 剔除索引1即是剔除字符x
list_Str_Input.pop(0)  # 剔除索引0即是剔除字符0

3.3、多次去除0x

  上面输入的只有一个字节,如果是多个字节,比如0x120x340x560x780x9A0xBC0xDE0xFF,对于上面的两种方法无论哪一种都是去除索引0和索引1的字符,只不过是先后顺序有区别。去除0x第一次后,字符串变成120x340x560x780x9A0xBC0xDE0xFF,现在第一个0x索引2索引3位置,去除0x第二次后,字符串变成12340x560x780x9A0xBC0xDE0xFF第一个0x索引4索引5位置,所以每次去除的索引位置相比着上一次增加2len(list_Str_Input) >> 2求出需要循环去除0x的次数i-max,然后3.1和3.2中的索引的位置每次增加2

Str_Input = ' 0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xFF'  
Str_Input = Str_Input.replace(" ", "")  # 去掉空格
Str_Input = Str_Input.replace(",", "")  # 去掉逗号
# Str_Input = Str_Input.replace("0x", "") # 去掉0x,可以用,因为输入的十六进制里面不可能包含0x

list_Str_Input = list(Str_Input)  # list为每一个字符分配一个索引
for i in range(0, len(list_Str_Input) >> 2):  # for循环0,2,只循环=0,=1
	# list_Str_Input.pop(1 + 2 * i)  # 先剔除索引1,0x12变成012,在剔除索引0
	# list_Str_Input.pop(0 + 2 * i)
	list_Str_Input.pop(0 + 2 * i)  # 先剔除索引0,0x12变成x12,在剔除索引0即剔除字符x
	list_Str_Input.pop(0 + 2 * i)
list_Str_Output = ''.join(list_Str_Input)  # 合并为字符串

3.4、补充

  因为是不会出现0x0x这个数,所以我们使用replace函数也可以把字符串中的0x去掉,虽然比使用pop函数简单,但是3.1和3.2中的去除字符的方法思路可以使用到其他的地方去。

Str_Input = Str_Input.replace("0x", "") # 去掉0x,可以用,因为输入的十六进制里面不可能包含0x
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Old_Street/article/details/107544805

智能推荐

集合的addAll方法--list.addAll(null)会报错--java.lang.NullPointerException-程序员宅基地

文章浏览阅读1.8k次。Exception in thread "main" java.lang.NullPointerException at java.util.ArrayList.addAll(ArrayList.java:559) at com.iflytek.epdcloud.recruit.utils.quartz.Acool.main(Acool.java:16)import java.u..._addall(null)

java获取当天0点到24点的时间戳,获得当前分钟开始结束时间戳_java 获取某分钟的起止时间戳-程序员宅基地

文章浏览阅读4.5k次。public static void main(String[] args) { Calendar todayStart = Calendar.getInstance(); todayStart.set(Calendar.HOUR_OF_DAY, 0); todayStart.set(Calendar.MINUTE, 0); toda..._java 获取某分钟的起止时间戳

北京内推 | 京东AI研究院计算机视觉实验室招聘三维视觉算法研究型实习生-程序员宅基地

文章浏览阅读1.1k次。合适的工作难找?最新的招聘信息也不知道?AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职!京东 AI 研究院京东 AI 研究院(https://air.jd..._京东计算机视觉实验室

Ubuntu18.04安装配置Qt5.15_ubuntu安装qt5.15-程序员宅基地

文章浏览阅读2.1k次。Ubuntu18.04安装配置Qt5.15 Ubuntu18.04安装配置Qt5.15 Qt选择下载Qt安装Qt5.15.0配置后记 Qt选择 在官方的声明中,Qt5.15是Qt5.x的最后一个LTS版本,增加了即将在2020年底推出的Qt6的部分新特性,为了之后的新_ubuntu安装qt5.15

针对Error: You must either define the environment variable DJANGO_SETTINGS_MODULE ...问题的解决_project structure->facets->django->-程序员宅基地

文章浏览阅读1.8w次,点赞5次,收藏3次。针对Error: You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings问题的解决使用intelliJ Idea开发django项目,启动 manage.py 测试时,会出现如上所示问题。根据提示,有两种解_project structure->facets->django->

matplotlib 设置标签和图例_matplotlib title设置-程序员宅基地

文章浏览阅读171次。【代码】matplotlib 设置标签和图例。_matplotlib title设置

随便推点

【渝粤题库】陕西师范大学200161 文字学概论 作业_十小羊未哪一个不是象形字-程序员宅基地

文章浏览阅读3k次。《文字学概论》作业一、单选题1、原始社会陶器上的图形符号刻划是以( )为代表的。A 仰韶文化 B 马家窑文化 C 良渚文化 D 大汶口文化2、下列各字中不属于象形字的是( )。A十 B小 C羊 D未3、“画成弃物 ,随体诘屈”,是许慎给六书当中的( )所下的定义。A 象形 B 指事 C 假借 D 会意4、下列各字当中形旁为"肉”的是( )。A 肌 B 明 C 钥 D 腾5、“夫” 字是在“大”字之上加一横而成的,这_十小羊未哪一个不是象形字

tiny_tds: 简易的Microsoft SQL Server驱动程序 for Ruby-程序员宅基地

文章浏览阅读328次,点赞9次,收藏8次。tiny_tds: 简易的Microsoft SQL Server驱动程序 for Rubytiny_tds 是一个小巧且高效的Microsoft SQL Server驱动程序,专为Ruby编程语言设计。它提供了与SQL Server进行交互的能力,可以轻松地执行查询、事务管理以及数据操作。项目简介tiny_tds是一个开源项目,由Rails SQL Server社区开发并维护。该库支持多种...

高性能mysql第五版在线阅读_MySQL零基础入门推荐书籍(收藏版)-程序员宅基地

文章浏览阅读8.6k次。1,基础篇:1.1《SQL基础教程》本书是畅销书《SQL基础教程》第2版,介绍了关系数据库以及用来操作关系数据库的SQL语言的使用方法。书中通过丰富的图示、大量示例程序和详实的操作步骤说明,让读者循序渐进地掌握SQL的基础知识和使用技巧,切实提高编程能力。每章结尾设置有练习题,帮助读者检验对各章内容的理解程度。另外,本书还将重要知识点总结为“法则”,方便读者随时查阅。第2版除了将示例程序更新为对应..._高性能mysql第五版 pdf

spring-boot整合consul随记-程序员宅基地

文章浏览阅读931次,点赞33次,收藏18次。首先创建一个maven项目,使用的spring-boot版本为2.3.5.RELEASE,对应的spring cloud版本为Hoxton.RELEASE。我们在这个父项目里创建一个子模块consul-dev,如果使用idea的话,就在父项目上,右键new module,完善模块信息后就创建出来了,模块会配置在上面标签中。我的consul是用docker部署到Linux服务器上的,你自己测试的时候可以本地下载个windows版本的。我自己用的是latest最新版,你可以选择你喜欢的版本。

【web3j】java通过web3j监听并解析合约中的事件(event/emit)_java web3j 上链数据-程序员宅基地

文章浏览阅读2.6k次。java通过web3j监听并解析合约中的事件_java web3j 上链数据

linux上C++开发——1. C++包管理工具-程序员宅基地

文章浏览阅读1.4k次。C++包管理工具_c++包管理工具

推荐文章

热门文章

相关标签