首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在字符串中转换(右)子字符串?

如何在字符串中转换(右)子字符串?
EN

Stack Overflow用户
提问于 2022-02-16 12:17:17
回答 3查看 180关注 0票数 1

假设我有一条字符串:

代码语言:javascript
复制
'0123456abcde78sdfnwjeabcde8923kasjsducuabcded999'

如何将子字符串'abcde'两个字符移到生成的右侧:

代码语言:javascript
复制
'012345678abcdesdfnwje89abcde23kasjsducud9abcde99'

所以这个:

代码语言:javascript
复制
s = '0123456abcde78'
t = 'abcde'
n = 2  # (right shift)

Function(s, t, n) 

应给予:

代码语言:javascript
复制
'012345678abcde'

可以安全忽略的边缘情况:

  • 比移位量后面的子字符串('abcde1')更少的字符
  • 子字符串('abcdeabcde123')的连续出现
EN

回答 3

Stack Overflow用户

发布于 2022-02-16 12:25:06

我将使用replace - re.sub的正则表达式。

代码语言:javascript
复制
import re

s = "0123456abcde78sdfnwjeabcde8923kasjsducuabcded999"
t = 'abcde'
n = 2
print(re.sub(rf"({t})(.{{{n}}})", r"\2\1", s))

给予:

代码语言:javascript
复制
012345678abcdesdfnwje89abcde23kasjsducud9abcde99

解释:

  • 模式:
代码语言:javascript
复制
- `(` - First matching group: 
    - `{t}` - replaces `t` using f-strings - literally match the full substring.
代码语言:javascript
复制
- `)` - End first group
- `(` - Second matching group: 
    - `.` - any character
    - `{{` - escaped curly braces in f-string - to denote number of repetitions.
    - `{n}` - f-string replacement of `n` - the number of repetitions.
    - `}}` - escaped closing braces.
代码语言:javascript
复制
- `)` - End second group
  • 替换:
代码语言:javascript
复制
- Simply replace the order of the above groups.

regex101.com中的演示和解释(没有f-字符串)

要执行左移,只需更改组的顺序(即,首先匹配任何n字符,然后匹配t):

代码语言:javascript
复制
re.sub(rf"(.{{{n}}})({t})", r"\2\1", s)
票数 2
EN

Stack Overflow用户

发布于 2022-02-16 12:30:35

根据要查找的字符串的索引位置创建一个新字符串。以下几行中的一些内容:

代码语言:javascript
复制
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:]
票数 1
EN

Stack Overflow用户

发布于 2022-02-16 12:30:42

Python字符串是不可变的,因此您必须从以下位置创建一个新字符串:

  • ts中索引的开始
  • n字符从t结尾开始(所以在`s.index(t) + len(t))
  • t
  • n字符开头的字符串结束,超过t的末尾。

在Python中可以是:

代码语言:javascript
复制
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:]

根据您的要求省略错误和角案例处理.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71141719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档