第二章:文本处理与字符串操作基础

更新:11-22 神话故事 我要投稿 纠错 投诉

大家好,今天小编来为大家解答以下的问题,关于第二章:文本处理与字符串操作基础,这个很多人还不知道,现在让我们一起来看看吧!

答:字符串对象的split() 方法只能处理非常简单的情况,并且不支持多个分隔符,也不能对分隔符周围可能存在的空格做任何事情。但你可以使用re.split()

行="asdf fdjk; afed fjd、askjf、foo"

进口重新

re.split(r"[;s]s*",line)

2.在字符串的开头或者结尾处做文本匹配

问题:我们需要检查字符串开头或结尾的指定文本模式,例如检查文件扩展名和url 协议类型等;

解决方案:有一个简单的方法来检查字符串的开头或结尾:

开始()和结束()

如果您要检查和过滤列表字符串,则可以使用列表推导式;

if any(name.endswith((".c",".h")) for name in listdir(dirname)):

3.利用shell通配符做字符串匹配

4.文本模式的匹配和查找

如果只想匹配简单文本,通常只需要使用基本字符串方法,例如:str.find()、str.endswith()、str.startswith()或类似函数;

text="年份,但是没有,但是是的,但是bo,但是是的"

text.startswith("是的") #True

text.endswith("no") #False

text.find("no") #10对于更复杂的匹配,需要使用正则表达式和RE模块:

文本1="11/27/2017"

进口重新

if re.match(r"d+/d+/d+",text):

print("yes")match() 方法总是尝试在字符串的开头查找匹配项。如果您想搜索整个文本的所有匹配项,您应该使用findall() 方法;

findall() 方法搜索整个文本并找到所有匹配项并以列表的形式返回它们。如果你想迭代地查找匹配项,可以使用finditer() 方法;

text="今天是11/27/2017。 pcCon 于2015 年3 月13 日开始"

datepat=re.compile(r"d+/d+/d+")

datepat.findall(text) 定义正则表达式时,我们经常通过将模式的一部分括在括号中来将其引入捕获组中。

datapat=re.compile(r"(d+)/(d+)/(d+)")

捕获组通常会简化匹配结果的后续处理,因为可以单独提取每个组的内容;

5.查找和替换文本

问题:我们想要查找并替换字符串的文本

解决方案:对于简单文本模式,使用str.replace();

text="今天是11/27/2017。 pcCon 于2015 年3 月13 日开始"

text.replace("yeah","yep") 对于更复杂的模式,可以使用re 模块中的sub() 函数方法。为了说明如何使用它,假设我们要将日期格式从“11/27/2017”更改为“2017-11-27”:

text="今天是11/27/2017。 pcCon 于2015 年3 月13 日开始"

re.sub(r"(d+)/(d+)/(d+)",r"3-1-2",text) sub() 的第一个参数是要匹配的模式。第二个参数是要替换的模式。反斜杠加数字符号(如“3”)表示模式中捕获组的数量;

如果您打算使用相同的模式执行重复替换,请考虑首先编译该模式以获得更好的性能;

进口重新

datepat=re.compile(r"(d+)/(d+)/(d+)")

datepat.sub(r"3-1-2",文本)

"Today is 2017-11-27.pcConstarts 2015-3-13" 除了获取替换的文本之外,如果还想知道已经完成了多少替换,可以使用re.subn()。

newtext ,n=datepat.subn(r"3-1-2",文本)

新文本

"今天是2017 年11 月27 日。pcCon 于2015 年3 月13 日开始"

n

2

6.以不区分大小写的方式对文本做查找和替换

问题:我们需要以不区分大小写的方式在文本中查找并可能替换

解决方案:要进行不区分大小写的文本操作,需要使用re模块,在各种操作中添加re.IGNORECASE标签;

修饰符说明re.I 使匹配不区分大小写re.L 进行本地化识别(区域设置感知)匹配re.M 多行匹配,影响^ 和$re.S 使.匹配包括换行符在内的所有字符。re.U根据Unicode字符集解析字符。该标志影响w、W、b、B.re。匹配文本模式时,会识别最长的可能匹配。相反,我们要修改它以找到尽可能短的匹配;

解决方案:模式:r"(.)" 尝试匹配用引号引起来的文本。然而,正则表达式中的运算符是贪婪的,因此匹配过程基于寻找最长的可能匹配。要解决这个问题,只需添加?在模式中的运算符之后?修饰符就可以了;==r"(.)"

7.定义实现最短匹配的正则表达式

8.编写多行模式的正则表达式

9.将Unicode文本统一为规范形式

10.用正则表达式处理Unicode字符;

问题:我们想从字符串的开头、结尾或中间删除不必要的字符,例如空格;

解决方案: strip() 方法可用于删除字符串开头或结尾的字符。 lstrip() 和rstrip() 分别从左侧和右侧开始删除字符。默认情况下,这些方法会删除空格,但也可以指定字符;

str.strip() #默认去除空格

str.strip("/") #删除指定字符。上述操作只能去除字符串开头或结尾的字符,对于字符串中间的指定字符不起作用;如果要对里面的空格进行某种操作,对于某些操作,应该使用其他技术,例如正则表达式或replace()方法;

s.replace(" ","")

re.sub("s+","",s)

11.从字符串中去掉不需要的字符

12.文本过滤和清理

问题:我们需要以某种对齐方式格式化文本

解决方案:对于基本的字符串对齐要求,可以使用字符串的ljust()、rjust()和center()方法。

文本="你好世界"

文本.ljust(2)

"你好世界"

文本.ljust(20)

"你好世界"

文本.rjust(20)

"你好世界"

文本中心(20)

"你好世界"

text.rjust(20,"=")

"==========你好世界"

文本.ljust(20,"=")

"你好世界========="

文本.center(20,"=")

"====你好世界====="

format()函数也可以用来轻松完成对齐任务。您所需要做的就是合理使用“”、“”或“^”字符串以及所需的宽度值

格式(文本,"20")

"你好世界"

格式(文本,"20")

"你好世界"

格式(文本,"^20")

"你好世界

格式(文本,"*^20")

"****你好世界*****"

格式(文本,"*20")

"Hello world*********"

13.对其文本字符串

问题:我们想要将许多小字符串合并为一个大字符串;

解决方案:如果要合并的字符串位于序列或可迭代对象中,最快的合并方法是使用join() 方法;

parts=["是","芝加哥","不是","芝加哥?"]

" ".join(部分)

“芝加哥不是芝加哥吗?”对于多个字符串的简单串联,可以直接使用“+”运算符;

a="是芝加哥"

b="不是芝加哥?"

a + " " + b

“芝加哥不是芝加哥吗?”对于更负责任的字符串格式化操作,+运算符也可以用作format()的替代,

print("{} {}".format(a,b))

芝加哥不是芝加哥吗?当列表中的格式不统一时;我们需要在join() 之前处理它

数据=["ACME",50,91.1]

",".join(数据)

回溯(最近一次调用):

文件“”,第1 行,inTypeError: 序列项1: 预期str 实例,找到int

",".join(str(d) for d in data)

"ACME,50,91.1"

14.字符串链接和合并

问题:我想创建一个字符串,其中嵌入的变量名称替换为变量的字符串值;

解决方案:Python不支持字符串中变量的简单值替换,但是可以通过字符串的format()方法来近似模拟这个功能;

s="{name} 有{n} 条消息。"

s.format(name="overad",n=37)

“overad 有37 条消息。”两种方式:如果变量中确实可以找到要替换的值,则可以一起使用format_map()和vars()。示例如下:

名称="overad"

n=33

s.format_map(vars())

“overad 有33 条消息。”以上两种方法都无法优雅地处理缺失值;避免这种情况的一种方法是使用missing() 方法定义一个单独的类,

类safesub(dict):

. def __missing__(self,key):

.返回"{" + 键+ "}"

.

德尔恩

s.format_map(safesub(vars()))

“overad 有{n} 条消息。”如果您发现自己经常需要在代码中执行这些步骤,您可以将替换变量的过程隐藏在一个小函数中;

导入系统

def 子(文本):

.返回text.format_map(safesub(sys._getframe(1).f_locals))

.

名称="overad"

人数=37

print(sub("你好{name}"))

你好,过度

print(sub("您有{n} 条消息。"))

您有37 条消息。

print("你最喜欢的颜色是{color}")

你最喜欢的颜色是{color}

15.给字符串中的变量名做插值处理

问题:我们有一些很长的字符串,想要重新格式化它们,以便它们可以根据用户指定的列数显示;

解决方案:可以使用textwrap模块重新格式化文本输出;

导入文本换行

print(textwrap.fill(s,70)) textwrap 模块可以以简单直接的方式格式化文本,使其适合使用- 特别是当您希望输出在终端上很好地显示时;关于终端的大小可以通过os.get_terminal_size()获取;

导入操作系统

用户评论

煮酒

终于到了字符串学习阶段!

    有8位网友表示赞同!

长裙绿衣

之前没接触过编程,有点担心这部分内容难度会不会太高啊

    有16位网友表示赞同!

愁杀

字符串怎么处理?应该学到一些很实用的地方吧

    有6位网友表示赞同!

挽手余生ら

希望这本书解释得比较详细,我容易卡在细节上

    有7位网友表示赞同!

╯念抹浅笑

以前写作文的时候就喜欢玩文字游戏,这章内容感觉很有意思

    有11位网友表示赞同!

青衫故人

期待学习如何拼接字符串,太用了!

    有20位网友表示赞同!

反正是我

文本处理?是不是要用到很多算法?

    有15位网友表示赞同!

素颜倾城

我之前做过一些网页开发,对字符串操作还是有一些了解的

    有14位网友表示赞同!

孤城暮雨

这章内容一定能提升我的编程能力!

    有5位网友表示赞同!

你很爱吃凉皮

希望可以学到一些关于正则表达式的知识

    有11位网友表示赞同!

Hello爱情风

第二章的学习目标是什么呢?提前看看能加深理解

    有8位网友表示赞同!

代价是折磨╳

以前用过文本编辑器,但不知道它内部是怎样处理字符串的

    有20位网友表示赞同!

◆乱世梦红颜

会不会有案例练习?我喜欢沉浸式学习

    有20位网友表示赞同!

经典的对白

感觉这门课课程设计很完善,从基础到应用都可以学到

    有7位网友表示赞同!

半梦半醒i

学习完第二章,我想自己写一个简单的文本分析程序

    有13位网友表示赞同!

蔚蓝的天空〃没有我的翅膀

期待和大家一起讨论学习笔记 !

    有6位网友表示赞同!

疲倦了

希望这本书能教会我如何使用字符串进行高级编程操作

    有19位网友表示赞同!

【第二章:文本处理与字符串操作基础】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:广州复刻奢侈品购买攻略:揭秘十大购物途径 下一篇:莆田高仿男装批发市场必藏攻略:6大热门采购渠道一览