[英]How I can use regex to remove repeated characters from string
我有一个字符串,如下所示,我试图删除类似的连续字符。
import re
input = "abccbcbbb";
for i in input :
input = re.sub("(.)\\1+", "",input);
print(input)
现在我需要让用户指定 k 的值。 我正在使用以下 python 代码来执行此操作,但我收到错误消息TypeError: can only concatenate str (not "int") to str
import re
input = "abccbcbbb";
k=3
for i in input :
input= re.sub("(.)\\1+{"+(k-1)+"}", "",input)
print(input)
for i in input:
不满足您的需要。 i
是输入字符串中的每个字符,你的re.sub
应该将整个输入作为一个字符序列。
如果你打算匹配特定数量的字符,你应该去掉\1
之后的+
量词。 限制{min,}
/ {min,max}
量词应该放在它修改的模式之后。
此外,在定义正则表达式时使用原始字符串文字更方便。
您可以使用
import re
input_text = "abccbcbbb";
k=3
input_text = re.sub(fr"(.)\1{{{k-1}}}", "", input_text)
print(input_text)
# => abccbc
请参阅此 Python 演示。
fr"(.)\1{{{k-1}}}"
原始 f 字符串文字将转换为(.)\1{2}
模式。 在 f 字符串中,您需要双花括号来表示文字花括号,并且您不需要再次转义\1
,因为它是r
aw 字符串文字。
如果我是你,我宁愿按照之前的建议去做。 但由于我已经花时间回答了这个问题,所以这里是我手工制作的解决方案。
下面描述的模式创建了一个名为“letter”的命名组。 这个组更新迭代,所以首先它是 a,然后是 b,等等。然后它向前看组“字母”的所有重复(为每个字母更新)。
所以它找到所有重复字母组并用空字符串替换它们。
import re
input = 'abccbcbbb'
result = 'abcbcb'
pattern = r'(?P<letter>[a-z])(?=(?P=letter)+)'
substituted = re.sub(pattern, '', input)
assert substituted == result
只是为了确保我的问题是正确的,你的意思是将“abccbcbbb”变成“abcbcb”,只删除连续的重复字符。 您是否需要使用正则表达式? 您可能会做一个简单的列表理解。 我的意思是这是一种非常简单和肮脏的方法,但你可以把
input = "abccbcbbb"
input = list(input)
previous = input.pop(0)
result = [previous]
for letter in input:
if letter != previous : result += letter
previous = letter
result = "".join(result)
并且使用这样的方法,您可以通过一些修改 id assume 使其更易于阅读和更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.