English 中文(简体)
从字符串中删除一个字符,同时保留按顺序重复的该字符的子字符串不受影响
原标题:Removing a character from a string while leaving substrings of that character repeated sequentially intact

我有一个字符串,我想从中删除某个字符。但是,如果该字符在一行中多次出现,我不想删除该字符的实例。例如,我想从字符串中删除“a”,但我不想删除任何子字符串,如“aa”、“aaa”等。我知道如何使用regex来完成相反的操作(替换一行中的多个字符,同时在字符串中保留单独的字符),但我想不出如何做到这一点。

问题回答

一种可能的解决方案是使用re.sub+lambda函数:

import re

s =  aXaaXaXaaXa 

s = re.sub(r a+ , lambda g:    if len(g[0]) == 1 else g[0], s)
print(s)

打印:

XaaXXaaX

您可以使用re。sub具有负前瞻(?!…)和负前瞻(?<;…)

import re

def remove_except_when_repeated(s: str, ch: str) -> str:
    pattern = "(?<!{0}){0}(?!{0})".format(ch)
    return re.sub(pattern, "", s)

print(f"{remove_except_when_repeated( abaacadaeafaa ,  a ) = }")

输出:

remove_except_when_repeated( abaacadaeafaa ,  a ) =  baacdefaa 

对于正则表达式,可以使用负向前看和向后看:

s = "abaacaaadaeaa"

import re

re.sub(r (?<!a)a(?!a) ,  ,s)

 baacaaadeaa 

如果没有re模块,您可以使用4个替换(假设|或您选择的其他字符从不在字符串中):

s.replace("a","|a|").replace("||","").replace("|a|","").replace("|","")

 baacaaadeaa 




相关问题
Simple JAVA: Password Verifier problem

I have a simple problem that says: A password for xyz corporation is supposed to be 6 characters long and made up of a combination of letters and digits. Write a program fragment to read in a string ...

Case insensitive comparison of strings in shell script

The == operator is used to compare two strings in shell script. However, I want to compare two strings ignoring case, how can it be done? Is there any standard command for this?

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

String initialization with pair of iterators

I m trying to initialize string with iterators and something like this works: ifstream fin("tmp.txt"); istream_iterator<char> in_i(fin), eos; //here eos is 1 over the end string s(in_i, ...

break a string in parts

I have a string "pc1|pc2|pc3|" I want to get each word on different line like: pc1 pc2 pc3 I need to do this in C#... any suggestions??

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签