日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

在 Python 中的常见的几种字符串替换操作(Python.org)

發布時間:2023/12/15 综合教程 43 生活家
生活随笔 收集整理的這篇文章主要介紹了 在 Python 中的常见的几种字符串替换操作(Python.org) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于Python3.7.3中,主要的方法有

  • 替換子串:replace()
  • 替換多個不同的字符串:re.sub(),re.subn()
  • 用正則表達式替換:re.sub(),re.subn()
  • 根據位置來替換:slice()

replace() 方法

比如,輸入的字符串為’one two one two one’,第一個參數為替換前的參數,第二個為替換后的參數。默認會替換字符串中的所有符合條件的字符串

s = 'one two one two one'

print(s.replace(' ', '-'))
# one-two-one-two-one

也可以指定一個最大替換次數值,一旦指定,只會替換前面匹配的n個字符串

print(s.replace('one', 'XXX'))
# XXX two XXX two XXX

print(s.replace('one', 'XXX', 2))
# XXX two XXX two one

當然,也可以支持鏈式的多次調用實現多重條件過濾。(但最好還是使用下面的translate()方法)

print(s.replace('one', 'XtwoX').replace('two', 'YYY'))
# XYYYX YYY XYYYX YYY XYYYX

print(s.replace('two', 'YYY').replace('one', 'XtwoX'))
# XtwoX YYY XtwoX YYY XtwoX

替換多個不同的字符串: translate()

translate官方文檔

轉換關系存放在 str.maketrans() 方法來創建。并且調用 translate() 來真正的執行。用例如下

s = 'one two one two one'

print(s.translate(str.maketrans({ 
   'o': 'O', 't': 'T'})))
# One TwO One TwO One

print(s.translate(str.maketrans({ 
   'o': 'XXX', 't': None})))
# XXXne wXXX XXXne wXXX XXXne

其中,maketrans 方法中是一個字典參數,第一個參數(key)為替換前的參數,第二個參數(value)為替換后的參數(為None表示移除替換前的參數)。

str.maketrans()也可以使用三個字符串作為參數,而不是字典。

如果不是一個字典參數,而是如下的兩個參數或者3個參數,那么結果如下:

print(s.translate(str.maketrans('ow', 'XY')))
# Xne tYX Xne tYX Xne

print(s.translate(str.maketrans('ow', 'XY', 'n')))
# Xe tYX Xe tYX Xe

在上面的情況下,第一個和第二個參數的長度必須匹配。在兩個參數的情況下,會將第一個參數的字符,依次的映射成第二個參數的字符(o-> X,w-> Y)。第三個參數表示在映射完的結果之后,需要移除的字符。

通過正則表達式來實現替換:re.sub, re.subn

re — Regular expression operations

在第一個參數中輸入正則表達式,第二個參數表示需要替換的子字符串,第三個參數表示需要處理的字符串,

import re

s = 'aaa@xxx.com bbb@yyy.com ccc@zzz.com'

print(re.sub('[a-z]*@', 'ABC@', s))
# ABC@xxx.com ABC@yyy.com ABC@zzz.com

和前面的replace() 方法一樣,也可以指定最大的替換次數(第四個參數)

print(re.sub('[a-z]*@', 'ABC@', s, 2))
# ABC@xxx.com ABC@yyy.com ccc@zzz.com

使用同一個字符串,來替換多個子串,如果你對正則表達水熟悉的化,可以考慮在正則中加入 | 來同時匹配多個字符串。

print(re.sub('aaa|bbb|ccc', 'ABC', s))
# ABC@xxx.com ABC@yyy.com ABC@zzz.com

也可以使用在替換后的新子串中引入原先的替換子串的部分值。通過正則表達式中的 \1 等來實現。

在正則表達式中\1 代表了原先正則表達式中的第一個小括號()里面匹配的內容,\2 表示匹配的第二個,依次類推,所以,在實際中可以靈活地使用匹配的原字符串。

print(re.sub('([a-z]*)@', '\-123@', s))
# aaa-123@xxx.com bbb-123@yyy.com ccc-123@zzz.com

print(re.sub('([a-z]*)@', r'-123@', s))
# aaa-123@xxx.com bbb-123@yyy.com ccc-123@zzz.com

說明一下,就是如果字符串開頭沒有加上 r,則你需要多轉義一次

如果你想獲得正則表達式匹配后的各個組合部分(分組后的)信息,可以使用 re.subn() 函數。

re — Regular expression operations

不好理解的化,可以參看下面的例子。

t = re.subn('[a-z]*@', 'ABC@', s)
print(t)
# ('ABC@xxx.com ABC@yyy.com ABC@zzz.com', 3)

print(type(t))
# <class 'tuple'>

print(t[0])
# ABC@xxx.com ABC@yyy.com ABC@zzz.com

print(t[1])
# 3

通過位置來替換: slice

嚴格來說,也不算是新的替換方法,其實就是字符串的切片操作,一定程度上可以實現字符串替換的效果。

s = 'abcdefghij'

print(s[:4] + 'XXX' + s[7:])
# abcdXXXhij

s_replace = 'XXX'
i = 4
print(s[:i] + s_replace + s[i + len(s_replace):])
# abcdXXXhij

print(s[:4] + '-' + s[7:])
# abcd-hij

參考文獻:


  1. 原文Replace strings in Python (replace, translate, re.sub, re.subn) | note.nkmk.me

總結

以上是生活随笔為你收集整理的在 Python 中的常见的几种字符串替换操作(Python.org)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。