python标志位截取,Python正则表达式 re.sub()函数:标志位flags与参数个数问题

本文主要是介绍python标志位截取,Python正则表达式 re.sub()函数:标志位flags与参数个数问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这两天在写爬虫程序,涉及英文文本处理,需要规范化英文标点符号的写法。正常情况下,英文句号「.」后面需要保证有且只有一个空格,但也有例外情况,比如「i.e.」、「e.g.」、「P.S.」这种。由于无法预测大小写,因此在正则表达式中使用了「标志位」flags,却死活不生效。

一开始,我的函数是这样写的:

1 def punctuate(s):

2 #----其余代码暂略

3 s = re.sub(' e. g. ', 'e.g.', s, re.I)

4 return s

代码的本意是:本来好好的「e.g.」,被函数前半断的代码错改成「e. g. 」之后,需要修复一下,将英文句号「.」后面的空格删掉。但这行 re.sub() 代码主要有2个问题:

「e. g.」前后不一定是空格,因此这样写的话,如果遇到「e. g.,」或是「(e. g. xxx」的情况就会被跳过。

英文的句号「.」未转义

标志位 re.I 不生效

前2个问题好解决。改进代码如下:

1 def punctuate(s):

2 #----其余代码暂略

3 s = re.sub('([^a-zA-Z]e\.) (g\.[^a-zA-Z])', '\g<1>\g<2>', s, re.I)

4 return s

规则是:「e. g.」之前或之后,必须有「非英文字母」的字符(包括空格),且「e.」和「g.」中间有一个空格,则将中间的空格删掉,且保留前后的「非英文字母」(\g<1>表示查找到的第1个括号内的文本,\g<2>表示第2个括号)。但标志位 re.I 的问题还是没解决。

后来翻到了「Python--详解Python中re.sub」这篇文章,才顿悟:re.sub() 函数有5个参数,我传入了4个参数,最后一个被认为是第4个参数,而不是第5个!多么低级的错误啊!

re.sub(pattern, repl, string, count=0, flags=0)

我传入的第4个参数 re.I 会被当作是 count。因此,正确的姿势是明确写明「flags=re.I」。

整个标点符号规范化函数还包括其它的替换,完整代码如下:

1 def punctuate(s):

2 s = re.sub('([,:;?!\.”\)])', '\g<1> ', s) #后加空格

3 s = re.sub('([“\(])', ' \g<1>', s) #前加空格

4 s = re.sub('([“\(]) ', '\g<1>', s) #后删空格

5 s = re.sub(' ([,:;?!\.”\)])', '\g<1>', s) #前删空格

6 s = re.sub('([,\.?!;\)]) ”', '\g<1>”', s) #闭引号前去空格

7 s = re.sub('\) ([,:;?!\.”])', ')\g<1>', s) #闭括号后去空格

8 s = re.sub('(\d)\. (\d)', '\g<1>.\g<2>', s) #小数点后去空格

9 s = re.sub(' +', ' ', s) #多空格改单空格

10 #拉丁加点缩写单词,点号后面去空格

11 s = re.sub('([^a-zA-Z]e\.) (g\.[^a-zA-Z])', '\g<1>\g<2>', s, flags=re.I)

12 s = re.sub('([^a-zA-Z]i\.) (e\.[^a-zA-Z])', '\g<1>\g<2>', s, flags=re.I)

13 s = re.sub('([^a-zA-Z]q\.) (v\.[^a-zA-Z])', '\g<1>\g<2>', s, flags=re.I)

14 s = re.sub('([^a-zA-Z]v\.) (s\.[^a-zA-Z])', '\g<1>\g<2>', s, flags=re.I)

15 s = re.sub('([^a-zA-Z]n\.) (b\.[^a-zA-Z])', '\g<1>\g<2>', s, flags=re.I)

16 s = re.sub('([^a-zA-Z]p\.) (s\.[^a-zA-Z])', '\g<1>\g<2>', s, flags=re.I)

17 s = re.sub('\. ,', '.,', s)

18 return s

819a8475756a55697bdf4fd3754782da.png

多么痛的领悟!

python学习道路&lpar;day4note&rpar;&lpar;函数&comma;形参实参位置参数匿名参数,匿名函数,高阶函数,镶嵌函数&rpar;

1.函数 2种编程方法 关键词面向对象:华山派 --->> 类----->class面向过程:少林派 -->> 过程--->def 函数式编程:逍遥派 --> ...

python中,print函数的sep和end参数

print函数是我们经常使用的,但是它的sep和end参数或许对很多python使用者相对陌生,他们可以让我们的打印更具有个性化. 先来看下官方解释, sep:分割值与值,默认是一个空格 end:附件 ...

简介Python正则表达式

一.概念 简单来说正则表达式是由一些普通字符(例如,a 到 z 之间的字母)和一些元字符组成,用来匹配和过滤一些字符串的一种逻辑公式. 二.正则表达式的一些基本规则 1.一些常用的元字符   ^  : ...

python正则表达式模块re:正则表达式常用字符、常用可选标志位、group与groups、match、search、sub、split&comma;findall、compile、特殊字符转义

本文内容: 正则表达式常用字符. 常用可选标志位. group与groups. match. search. sub. split findall. compile 特殊字符转义 一些现实例子 首发时 ...

python五十六课——正则表达式(常用函数之match)

函数:match(regex,string,[flags=0])参数:regex:就是正则表达式(定义了一套验证规则)string:需要被验证的字符串数据flags:模式/标志位,默认情况下(不定义) ...

&dollar;python正则表达式系列(2)——re模块常用函数

本文主要介绍正则re模块的常用函数. 1. 编译正则 import re p = re.compile(r'ab*') print '[Output]' print type(p) print p p ...

&lbrack; Python - 12 &rsqb; 线程的信号量、标志位及队列

线程的信号量 线程的信号量是同时允许一定数量的线程更改数据,主要作用在于限制线程的并发. #!_*_coding:utf-8_*_ # Author: hkey import threading, t ...

关于Python正则表达式findall函数问题详解

关于Python正则表达式 findall函数问题详解 在写正则表达式的时候总会遇到不少的问题, 特别是在表达式有多个元组的时候.下面看下re模块下的findall()函数和多个表达式元组相遇的时候会 ...

Python 正则表达式之 sub 和 subn函数的使用

re.sub() 函数的功能 re是reguler expressioin的缩写,表示正则表达式 sub 是 substitute 的缩写,表示替换: re.sub是个正则表达式方面的函数,用来实现通 ...

随机推荐

ASP&period;NET MVC5&plus;EF6&plus;EasyUI 后台管理系统(65)-MVC WebApi 用户验证 &lpar;1&rpar;

系列目录 前言: WebAPI主要开放数据给手机APP,其他需要得知数据的系统,或者软件应用,所以移动端与系统的数据源往往是相通的. Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能, ...

记录在linux下的wine生活

记录在linux下的windows生活 本篇内容涉及QQ.微信.Office的安装配置 QQ: 到deepin下载轻聊版. 如果安装了crossover,那么将其中opt/cxoffice/suppo ...

java的poi技术读取和导入Excel

项目结构: http://www.cnblogs.com/hongten/gallery/image/111987.html  用到的Excel文件: http://www.cnblogs.com/h ...

Android 学习笔记

1.sleep(),wait(),notify(),notifyAll() sleep()是线程类的静态方法,阻塞线程一定时间后再次使线程处于可以被调度运行的状态wait(),notify(),not ...

虚拟机下玩DXF

DXF检测虚拟机好象已经很长时间了,记得当时也是在网上找的教程,今天无聊又检测了一下,发现目前依然有效.用记事本打开 虚拟机启动文件 xxxx.vmx 在最后添加如下两行代码monitor_contr ...

hihocoder-1391&amp&semi;&amp&semi;北京网赛09 Countries&lpar;优先队列&rpar;

题目链接: Countries 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 There are two antagonistic countries, country ...

java语言写文件内容

import java.io.File;import java.io.FileWriter;import java.io.IOException; public static void main(St ...

tachyon 集群安装

tachyon的集群安装和单机安装差别不大 http://www.cnblogs.com/admln/p/tachyon-local-install.html 不同的地方 1.修改slaves时填入所 ...

css3动画 9步

...

北漂的IT人

北京的互联网人,是工作日完全没有个人生活的一类人,也是整个北漂大队伍中,下班时间最晚的那一波人,如果赶上周末还要加班,那毫不夸张地说,你的整个人生都在互联网上奋斗着. 虽说十点上班让多少行内外的人羡慕 ...

这篇关于python标志位截取,Python正则表达式 re.sub()函数:标志位flags与参数个数问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_36309193/article/details/116188083
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/329841

相关文章

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、

Python struct.unpack() 用法及常见错误详解

《Pythonstruct.unpack()用法及常见错误详解》struct.unpack()是Python中用于将二进制数据(字节序列)解析为Python数据类型的函数,通常与struct.pa... 目录一、函数语法二、格式字符串详解三、使用示例示例 1:解析整数和浮点数示例 2:解析字符串示例 3:解

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.