我正在尝试从字符串中删除除 #
、@
、:)
、:(
。
示例:
this is, a placeholder text. I wanna remove symbols like ! and ? but keep @ & # & :)
应该导致(删除匹配结果后):
this is a placeholder text I wanna remove symbols like and but keep @ # :)
我试过:
(?! |#|@|:\)|:\()\W
它正在工作,但在 :)
和 :(
的情况下,:
仍在匹配。
我知道它是匹配的,因为它检查每个字符和前面的字符,例如: :)
只匹配 :
但 :))
匹配 :)
。
最佳答案
这是一个棘手的问题,因为您想删除除某个白名单之外的所有符号。此外,白名单中的一些符号实际上由两个字符组成:
:)
:(
为了处理这个问题,我们可以先保留冒号 :
和括号,然后有选择地删除其中一个,如果它不是笑脸或皱眉的一部分:
input = "this is, a (placeholder text). I wanna remove symbols like: ! and ? but keep @ & # & :)"
output = re.sub(r'[^\w\s:()@&#]|:(?![()])|(?<!:)[()]', '', input)
print(output)
this is a placeholder text I wanna remove symbols like and but keep @ & # & :)
我使用的正则表达式字符类是:
[^\w\s:()@&#]
这将匹配任何不是单词或空白字符的字符。它还使您的白名单免于替换。在交替的其他两个部分中,我们通过删除冒号和括号(如果它们不是笑脸的一部分)来覆盖这个逻辑。
关于python - 用于匹配所有字符的正则表达式,除了一些特殊字符和 ":)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56091632/