Python正则表达式之compile的使用心得

1、为什么使用正则表达式?

最近在从事数据清洗的工作,对于很多的数据不能直接使用,所以前期的数据清洗非常有必要。为此首先就想到了正则表达式来进行部分数据的清洗操作。这也是在工作中使用非常常见的手段,所以今天简单记录一下。

2、使用需求

对于文本数据,按照行来进行清洗。由于一行数据中很有可以出现不合理的数据,比如本身是描述一段风景的中文文本,但是出现了部分英文字母甚至单词夹杂其中,所以需要去除多余的英文字母和单词。

特别的时候,并不需要将所有的不合理数据都去除,而是去除前面2个或者3个不合理数据即可。

3、过程分析

3.1、首先去除文本中所有不合理的数据,代码如下:

import re

str = "hi此撒还得华氏ci度武器心爱的hi无敌和湿地和"
print(re.sub(r'[a-zA-Z0-9]','',str)) # 至于sub的使用,完全可以参照其他资源

运行结果如下:

3.2、去除文本中指定次数的非法数据,这里认为连续字母作为1个单词,若去除2个非法数据,那么就是去除“hi”和“ci”。

由于compile的输出结果是供search和match使用的,而这两个都是从首位开始匹配,或者指定起始位置。显然在本案例中指定起始位置是不合理的。代码如下:

import re

str = "大大hi此撒还得23455华氏ci度武器心爱的hi无敌和湿地和"
pattern = re.compile(r'([a-zA-z]+)([^a-zA-z]+)([a-zA-z]+)')# 每个括号代表1个组
m = pattern.search(str)
print(m.group(0))# 表示所有组整体输出
# 每个组对应1个下标
print(m.group(1))
print(m.group(2))
print(m.group(3))
# 依次将前2次非法数据去除
str = re.sub(m.group(1),'',str,count=1)
str = re.sub(m.group(3),'',str,count=1)
print(str)# output: 大大此撒还得23455华氏度武器心爱的hi无敌和湿地和

输出结果:

部分解释:

  1. compile设置3个组的原因是因为search会顺序向后查找,所以两个单词之间可能存在其他文本,所以用3个组。
  2. sub部分分别对两个单词进行替换,从而完成去除任务。

4、结论

主要就是要理解compile分组的意思,对于分组后的结果应该如何理解,才能更好的利用search和match方法。

浅显记录一下,欢迎友友们的意见和建议。

### 关于兰州大学编译原理实验的相关资源 针对兰州大学编译原理课程中的实验部分,通常会涉及词法分析、语法分析以及语义分析等内容。为了帮助学生更好地理解和完成这些实验,学校往往会提供详细的实验指导书和教程。 #### 实验报告示例结构 一份完整的编译原理实验报告应当包含以下几个主要组成部分: 1. **摘要** 描述本次实验的目的、方法及预期成果。 2. **理论基础** 阐述所使用的算法和技术背景,如有限自动机用于词法分析[^1]。 3. **设计思路** 解释如何实现各个阶段的功能模块,包括但不限于: - 词法分析器的设计 - 文法定义及其转换过程 - 抽象语法树构建逻辑 4. **代码实现** 提供关键代码片段并加以说明。例如,在Python中可以这样编写简单的正则表达式匹配函数来辅助词法分析工作: ```python import re def match_token(pattern, string): """ 使用给定模式pattern尝试从字符串string开头处匹配token. 参数: pattern (str): 正则表达式的模式串 string (str): 待解析的输入字符序列 返回: tuple: 如果成功,则返回(matched_string, remaining_string); 否则返回None """ regex = r'^' + pattern matcher = re.compile(regex) result = matcher.match(string) if not result: return None start, end = result.span() matched_part = string[start:end] rest_of_input = string[end:] return (matched_part, rest_of_input) ``` 5. **测试案例** 展示不同类型的测试样例及其运行结果对比表单。 6. **总结反思** 对整个项目开发过程中遇到的问题进行归纳整理,并提出改进建议。 7. **附录材料** 列举参考文献列表以及其他补充性文档链接地址。 #### 获取更多学习资料的方法 对于希望深入了解该领域知识的学生而言,除了认真研读官方教材外,还可以通过以下途径获取额外的学习素材: - 访问开源社区平台GitHub搜索相关课题; - 加入在线论坛交流群组分享经验心得; - 参考其他高校公开发布的教学视频与讲义文件;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值