gpt4 book ai didi

Python - 使用正则表达式编写一个模仿 strip() 方法的函数

转载 作者:行者123 更新时间:2023-12-04 10:04:28 28 4
gpt4 key购买 nike

我正在做一个来自 Automate the Boring Stuff 的问题,试图使用正则表达式模仿 strip() 方法。我已经很清楚了,可以使用空格和我想删除的特定单词。但是当从字符串末尾删除特定关键字时,它总是会切断字符串的最后一个字母,谁能帮我找出原因?

def strip_func(string, *args):
strip_regex = re.compile(r'^(\s+)(.*?)(\s+)$')
mo = strip_regex.findall(string)
if not mo:
rem = args[0]
remove_regex = re.compile(rf'({rem})+(.*)[^{rem}]')
remove_mo = remove_regex.findall(string)
print(remove_mo[0][1])

else:
print(mo[0][1])

因此,如果没有传递第二个参数,则该函数将从字符串的任一侧删除空格,
我用这个字符串来测试:
s = '        This is a string with whitespace on either side        '

否则它会删除关键字,有点像 strip 函数。例如:
spam = 'SpamSpamBaconSpamEggsSpamSpam'
strip_func(spam, 'Spam')

输出:
BaconSpamEgg

所以错过了 Eggs 末尾的 's',我尝试的每个字符串都会发生同样的事情。在此先感谢您的帮助。

最佳答案

您可以使用

import re

def strip_func(string, *args):
return re.sub(rf'^(?:{re.escape(args[0])})+(.*?)(?:{re.escape(args[0])})+$', r'\1', string, flags=re.S)

spam = 'SpamSpamBaconSpamEggsSpamSpam'
print(strip_func(spam, 'Spam'))

Python demo . ^(?:{re.escape(args[0])})+(.*?)(?:{re.escape(args[0])})+$ pattern 将创建一个类似 ^(?:Spam)+(.*?)(?:Spam)+$ 的模式并且会匹配
  • ^ - 字符串开头
  • (?:Spam)+ - 一次或多次出现 Spam在字符串的开头
  • (.*?) - 第 1 组:尽可能少的任何 0 个或更多字符
  • (?:Spam)+ - 一次或多次出现 Spam在字符串的开头
  • $ - 字符串的结尾。
  • flags=re.S将使 .也匹配换行符。

    关于Python - 使用正则表达式编写一个模仿 strip() 方法的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61657669/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com