想用 Python 搞定文本内容替换?听起来很简单,但实际上门道可不少。我跟你讲,光是替换字符串,就能玩出各种花样来。别急,咱们今天就来好好聊聊 Python 怎么换文本,保证让你看完能上手操作,遇到实际问题也能灵活应对。
最基础的,当然是用 replace()
方法。这玩意儿简直是文本替换界的瑞士军刀,简单粗暴,啥都能干。比如,你想把 “hello” 替换成 “world”,代码就这么写:
python
text = "hello, world! hello, Python!"
new_text = text.replace("hello", "world")
print(new_text) # 输出: world, world! world, Python!
看到了吧?所有 “hello” 都变成了 “world”。 但问题来了,replace()
默认是全局替换,一不小心就全改了。如果你只想替换第一个出现的 “hello” 呢? 简单,replace()
还有个可选参数,指定替换次数:
python
text = "hello, world! hello, Python!"
new_text = text.replace("hello", "world", 1)
print(new_text) # 输出: world, world! hello, Python!
这下好了,只有第一个 “hello” 被替换了。但是,replace()
只能进行简单的字符串替换,如果要进行更复杂的替换,比如根据模式匹配进行替换,那就得祭出我们的正则表达式模块 re
了。
re
模块简直是文本处理的魔法棒,能让你用各种正则表达式去匹配文本,然后进行替换。先看个简单的例子:把所有数字都替换成 “NUMBER”。
“`python
import re
text = “我的电话号码是 13812345678,家里电话是 021-87654321。”
new_text = re.sub(r”\d+”, “NUMBER”, text)
print(new_text) # 输出: 我的电话号码是 NUMBER,家里电话是 NUMBER。
“`
re.sub()
函数接受三个参数:正则表达式模式、替换成的字符串、原始文本。\d+
是一个正则表达式,表示匹配一个或多个数字。怎么样,是不是感觉有点意思了?
但是,如果我想把电话号码替换成脱敏后的形式,比如只保留前三位和后四位,中间的用 * 号代替,那该怎么办呢? 这时候,re.sub()
的威力就体现出来了,它可以接受一个函数作为替换参数! 这个函数接收一个匹配对象,你可以对匹配到的内容进行任何处理,然后返回替换后的字符串。
“`python
import re
def mask_phone_number(match):
number = match.group(0)
return number[:3] + “****” + number[-4:]
text = “我的电话号码是 13812345678,家里电话是 02187654321。”
new_text = re.sub(r”\d{11}|\d{8}”, mask_phone_number, text)
print(new_text) # 输出: 我的电话号码是 138*5678,家里电话是 021*4321。
“`
这里,mask_phone_number
函数接收一个 match
对象,通过 match.group(0)
获取匹配到的完整字符串(也就是电话号码),然后进行脱敏处理,返回脱敏后的字符串。 \d{11}|\d{8}
这个正则表达式匹配11位或者8位数字的电话号码。这种方式是不是很灵活?你可以根据自己的需求,编写各种各样的替换函数,实现各种复杂的文本处理逻辑。
而且,re
模块还支持很多高级特性,比如分组匹配、反向引用等等。 想象一下,如果你想交换文本中两个单词的位置,比如把 “hello world” 变成 “world hello”,就可以使用分组匹配和反向引用:
“`python
import re
text = “hello world”
new_text = re.sub(r”(\w+) (\w+)”, r”\2 \1″, text)
print(new_text) # 输出: world hello
“`
(\w+) (\w+)
这个正则表达式表示匹配两个单词,用括号括起来的部分表示一个分组。 \1
表示第一个分组匹配到的内容,\2
表示第二个分组匹配到的内容。所以,r"\2 \1"
就表示把第二个单词放在前面,第一个单词放在后面,实现了单词位置的交换。
除了 replace()
和 re.sub()
,还有一些其他的文本替换技巧。 比如,如果你要替换的字符串比较多,可以用 str.maketrans()
和 str.translate()
结合使用,提高效率。
python
table = str.maketrans("abc", "xyz")
text = "This is a string with abc."
new_text = text.translate(table)
print(new_text) # 输出: This is a string with xyz.
str.maketrans()
创建一个转换表,把 “a” 替换成 “x”,”b” 替换成 “y”,”c” 替换成 “z”。 str.translate()
使用这个转换表对字符串进行替换。 这种方式适合一次性替换多个字符的情况。
再说说实际应用场景。比如,你从网上爬取了一篇文章,里面有很多 HTML 标签,你想把这些标签都去掉,只保留纯文本内容,就可以使用正则表达式进行替换:
“`python
import re
html = “
This is a paragraph.
Click here”
text = re.sub(r”<[^>]+>”, “”, html)
print(text) # 输出: This is a paragraph.Click here
“`
<[^>]+>
这个正则表达式表示匹配所有 HTML 标签。
或者,你想把一个 Markdown 文件转换成 HTML 文件,就可以使用正则表达式进行各种 Markdown 语法的替换,比如把 *强调*
替换成 <em>强调</em>
。
总之,Python 怎么换文本 这个问题,答案是多种多样的,取决于你的具体需求和场景。掌握了 replace()
和 re.sub()
这两个利器,基本上就能解决大部分的文本替换问题了。 别忘了多练习,多尝试,才能真正掌握这些技巧,让 Python 成为你文本处理的得力助手。 记住,实践才是检验真理的唯一标准! 赶紧动手试试吧!
评论(0)