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与参数个数问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/329841

相关文章

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo