假設我有這個字串:
'0123456abcde78sdfnwjeabcde8923kasjsducuabcded999'
如何將子字串'abcde'向右移動兩個字符以產生:
'012345678abcdesdfnwje89abcde23kasjsducud9abcde99'
所以這:
s = '0123456abcde78'
t = 'abcde'
n = 2 # (right shift)
Function(s, t, n)
應該給:
'012345678abcde'
可以安全忽略的邊緣情況:
- 字符數少于子字串 (
'abcde1')后面的移位量 'abcdeabcde123'子串 ( )的連續出現
uj5u.com熱心網友回復:
Python 字串是不可變的,因此您必須從以下位置創建一個新字串:
- 開始到
tin的索引s n從末尾開始的字符t(所以在 `s.index(t) len(t))tn從t結尾之后的字符開始的字串結尾
在 Python 中可能是:
def function(s, t, n):
ix = s.index(t)
length = len(t)
return s[:ix] s[ix length: ix length n] t s[ix length n:]
根據您的要求省略錯誤和極端情況處理...
uj5u.com熱心網友回復:
根據您要查找的字串的索引位置創建一個新字串。以下幾行中的一些內容:
s = '0123456abcde78'
t = 'abcde'
n = 2 # (right shift)
tmp = s.index(t)
new_s = s[:tmp] s[tmp len(t):tmp len(t) n] t s[tmp len(t) n:]
uj5u.com熱心網友回復:
我會使用 - 的正則運算式等效replace項re.sub:
import re
s = "0123456abcde78sdfnwjeabcde8923kasjsducuabcded999"
t = 'abcde'
n = 2
print(re.sub(rf"({t})(.{{{n}}})", r"\2\1", s))
給出:
012345678abcdesdfnwje89abcde23kasjsducud9abcde99
解釋:
圖案:
(- 第一個匹配組:{t}- 使用 f-strings 替換t- 從字面上匹配完整的子字串。
)- 結束第一組(- 第二個匹配組:.- 任何字符{{- f-string 中的轉義花括號 - 表示重復次數。{n}- f-string 替換n- 重復次數。}}- 逃脫了右括號。
)- 結束第二組
替代品:
- 只需替換上述組的順序。
regex101.com 中的演示和解釋(沒有 f 字串)
要改為左移,只需更改組的順序(即首先匹配任何n字符,然后匹配t):
re.sub(rf"(.{{{n}}})({t})", r"\2\1", s)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/426079.html
