文本处理常用方法

匹配模式字符串不要有任何空格和变量,重要!重要!重要!

re

准备正则表达式

  • 在正则表达式中,如果直接给出字符,就是精确匹配。
    \d 可以匹配一个数字
    \W 匹配非字母数字及下划线
    \w 可以匹配一个字母或数字
    \s 空格
  • 要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符:
    例:\d{3}\s+\d{3,8}
    表示的意思:\d{3}表示匹配3个数字,例如’010’;\s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配’ ‘,’ ‘等;\d{3,8}表示3-8个数字,例如’1234567’
re.match(r'\d{3}\-\d{3,8}', '021-12345')
  • 要做更精确地匹配,可以用[]表示范围
    例如:
[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;[0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','Py3000'等等;[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。A|B可以匹配A或B,所以(P|p)ython可以匹配'Python'或者'python'。^表示行的开头,^\d表示必须以数字开头。$表示行的结束,\d$表示必须以数字结束。py也可以匹配'python',但是加上^py$就变成了整行匹配,就只能匹配'py'了。
re.match(r'py', 'python')
Out[10]: <re.Match object; span=(0, 2), match='py'>
# 例子
>>> import re
>>> re.match(r'^\d{3}\-\d{3,8}$', '010-12345')
<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
>>> re.match(r'^\d{3}\-\d{3,8}$', '010 12345')
>>>

search

re.search 扫描整个字符串并返回第一个成功的匹配

"""
语法
re.search(pattern, string, flags=0)
pattern	匹配的正则表达式
string	要匹配的字符串。
flags	标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
匹配成功re.search方法返回一个匹配的对象,否则返回None。我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
"""
#!/usr/bin/python
import reline = "Cats are smarter than dogs";searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)if searchObj:print "searchObj.group() : ", searchObj.group()print "searchObj.group(1) : ", searchObj.group(1)print "searchObj.group(2) : ", searchObj.group(2)
else:print "Nothing found!!"

match

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

#!/usr/bin/python
import reline = "Cats are smarter than dogs";matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:print "match --> matchObj.group() : ", matchObj.group()
else:print "No match!!"matchObj = re.search( r'dogs', line, re.M|re.I)
if matchObj:print "search --> searchObj.group() : ", matchObj.group()
else:print "No match!!"

sub

Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。

"""
语法:re.sub(pattern, repl, string, count=0, flags=0)
参数:pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
"""
#!/usr/bin/python
# -*- coding: UTF-8 -*-import rephone = "2004-959-559 # 这是一个国外电话号码"# 删除字符串中的 Python注释 
num = re.sub(r'#.*$', "", phone)
print "电话号码是: ", num# 删除非数字(-)的字符串 
num = re.sub(r'\D', "", phone)
print "电话号码是 : ", num
以上实例执行结果如下:
电话号码是:  2004-959-559 
电话号码是 :  2004959559
re.sub(r'^[0]{1,100}', '', test) #去掉开头的0

split

re.split
split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:

"""
re.split(pattern, string[, maxsplit=0, flags=0])
参数:参数	描述
pattern	匹配的正则表达式
string	要匹配的字符串。
maxsplit	分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
flags	标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志
"""
import re
s='abc,  abc,  defg,  dds'
re.split('(\W+)',s)
result:['abc', ',  ', 'abc', ',  ', 'defg', ',  ', 'dds']
说明:\W匹配任何非单词字符import re
s='abc,  abc,  defg,  dds'
re.split('(\W+)',s)
['abc', ',  ', 'abc', ',  ', 'defg', ',  ', 'dds']
说明:如果加上括号,结果会同时返回去掉的值

string

split

不支持正则及多个切割符号,不感知空格的数量,比如用空格切割,会出现下面情况。

>>> s1="aa bb  cc"  
>>> s1.split(' ')  
['aa', 'bb', '', 'cc'] 

spritlines

Python splitlines() 按照行(’\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。

str1 = 'ab c\n\nde fg\rkl\r\n'
print str1.splitlines();str2 = 'ab c\n\nde fg\rkl\r\n'
print str2.splitlines(True)['ab c', '', 'de fg', 'kl']
['ab c\n', '\n', 'de fg\r', 'kl\r\n']

strip

Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。

注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

# re.match(pattern, string, flags=0)
#!/usr/bin/python
# -*- coding: UTF-8 -*-str = "00000003210Runoob01230000000"; 
print str.strip( '0' );  # 去除首尾字符 0str2 = "   Runoob      ";   # 去除首尾空格
print str2.strip();
result:
3210Runoob0123
Runoob# 只要头尾包含有指定字符序列中的字符就删除:
#!/usr/bin/python
# -*- coding: UTF-8 -*-str = "123abcrunoob321"
print (str.strip( '12' ))  # 字符序列为 12
3abcrunoob3

re.search().group()

import re
a = "123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)   #123abc456,返回整体
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)   #123
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)   #abc
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)   #456# 原文链接:https://blog.csdn.net/sinat_20174131/article/details/77769309

正则表达式中的三组括号把匹配结果分成三组

group() 同group(0)就是匹配正则表达式整体结果
group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。

没有匹配成功的,re.search()返回None

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420867.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Entity Framework中IQueryable, IEnumerable, IList的区别

博客园里有这样的总结。这里姑且先列个题目&#xff0c; 提醒自己记忆。转载于:https://www.cnblogs.com/buguge/p/3779817.html

Java中重载和复写的区别

Java中重载和复写的区别重载&#xff08;overload&#xff09;复写&#xff08;override&#xff09;区别和联系重载&#xff08;overload&#xff09; 函数重载的最突出的例子就是类的构造函数&#xff0c;用户定义一个对象时可能会提供多种参数组合&#xff1b;函数重载的第…

Sublime Text3自定义快捷键

转载于:https://www.cnblogs.com/shimily/articles/3783711.html

打jar包和执行jar包

使用eclipse打jar包 默认生成的目录在/Work/Projects/eclipse-workspace 执行 java -cp hellotest.jar com.feiyangedu.sample.Main java -cp testtesttest.jar com.feiyangedu.sample.Person out&#xff1a;print person java -cp testtesttest.jar com.feiyangedu.sample.…

受限波尔兹曼机

1. 概述 前面描述的神经网络模型是一种确定的结构。而波尔兹曼网络是一种随机网络。如何来描述一个随机网络呢&#xff1f;很多书上有大量的篇幅介绍其原理。这里把它总结为以下两点。 第一&#xff0c;概率分布函数。由于网络节点的取值状态是随机的&#xff0c;从贝叶斯网的…

字符编码理解

计算的本质是二进制的运算&#xff0c;所以要想把现实生活中的文字、图片、语音等信号媒介用计算机来处理&#xff0c;必须把这些东西切分成基本元素&#xff0c;然后把每一个元素一一映射为数字&#xff0c;这是最基本的做法。 英语切分成最基本的元素就是26个字母大小写加上…

jQuery css详解

今天确确实实是放了一天假&#xff0c;喝了点小酒&#xff0c;看了天天向上和快乐大本营以及中国好舞蹈&#xff0c;越来越热爱舞蹈了&#xff0c;还是总结一篇吧。 jquery css css(name|pro|[,val|fn)&#xff1a;访问或设置匹配元素的样式属性 1 $("div").click(fu…

1001 害死人不偿命的(3n+1)猜想 (15分)

1001 害死人不偿命的(3n1)猜想 (15分) 卡拉兹(Callatz)猜想&#xff1a; 对任何一个正整数 n&#xff0c;如果它是偶数&#xff0c;那么把它砍掉一半&#xff1b;如果它是奇数&#xff0c;那么把 (3n1) 砍掉一半。这样一直反复砍下去&#xff0c;最后一定在某一步得到 n1。卡拉…

java中的动态绑定与静态绑定

首先是方法的参数是父类对象&#xff0c;传入子类对象是否可行 然后引出Parent p new Children(); 这句代码不是很理解&#xff0c;google的过程中引出向上转型 要理解向上转型又引出了动态绑定 从动态绑定又引出了静态绑定 程序绑定的概念&#xff1a; 绑定指的是一个方法的…

1002 写出这个数 (20分)

1002 写出这个数 (20分) 读入一个正整数 n&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 输入格式&#xff1a; 每个测试输入包含 1 个测试用例&#xff0c;即给出自然数 n 的值。这里保证 n 小于 10 ​100 ​​ 。 输出格式&#xff1a; 在一…

ATL和ActiveX做的控件.dll和.ocx最主要的区别(摘录)

楼主是不是说用ATL做的控件和用MFC ActiveX wizard的控件有什么区别吧依存的动态库不一样&#xff0c; 一个是ATL.DLL吧&#xff0c; 一个是MFC42.DLL。 ATL开发的控件代码少&#xff0c;轻便&#xff0c;便于网上发布&#xff1b;MFC开发的控件笨重&#xff0c;但是MFC类库丰富…

1003 我要通过! (20分)

1003 我要通过&#xff01; (20分) “答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件&#xff0c;系统就输出“答案正确”&#xff0c;否则输出“答案错误”。 得到“答案正确”的条件是&#xff1a;…

推荐20款基于 jQuery CSS 的文本效果插件

jQuery 和 CSS 可以说是设计和开发行业的一次革命。这一切如此简单&#xff0c;快捷的一站式服务。jQuery 允许你在你的网页中添加一些真正令人惊叹的东西而不用付出很大的努力&#xff0c;要感谢那些优秀的 jQuery 插件。 所以今天我们将展示一些很酷的文本效果插件&#xff0…

1004 成绩排名 (20分)

1004 成绩排名 (20分) 读入 n&#xff08;>0&#xff09;名学生的姓名、学号、成绩&#xff0c;分别输出成绩最高和成绩最低学生的姓名和学号。 输入格式&#xff1a; 每个测试输入包含 1 个测试用例&#xff0c;格式为 第 1 行&#xff1a;正整数 n 第 2 行&#xff1a;…

Java反射技术

目录1. 什么是反射&#xff0c;为何用它2. Student类3. Person类4. 反射实现以测试学生类为主1. 什么是反射&#xff0c;为何用它 1.1 什么是反射:允许程序员在程序运行期间动态的获得某个类型的信息(类本身的信息以及类的成员信息),从而开发出更为灵活通用的代码 反射能做什么…

王灏:光音网络致力打造Wi-Fi大生态圈

光音网络&#xff0c;做的是本地网络综合服务。在中国&#xff0c;想把互联网做到覆盖延伸范围之外的最后100米&#xff0c;光音网络是当中一家&#xff0c;也是最坚持的一家。为千万家本地生活商户提供帮助&#xff0c;为数亿本地用户提供最佳的本地网络体验&#xff0c;这是光…