Python strip()正则表达式替换说明
我正在编写《用Python自动化无聊的东西》教科书中的regex替换strip()程序,因为我甚至不知道如何开始,我选择了堆栈溢出,并找到了一个包含以下代码的线程:Python strip()正则表达式替换说明,python,regex,Python,Regex,我正在编写《用Python自动化无聊的东西》教科书中的regex替换strip()程序,因为我甚至不知道如何开始,我选择了堆栈溢出,并找到了一个包含以下代码的线程: #!python3 import re respecchar = ['?', '*', '+', '{', '}', '.', '\\', '^', '$', '[', ']'] def regexstrip(string, _strip): if _strip == '' or _strip == ' ':
#!python3
import re
respecchar = ['?', '*', '+', '{', '}', '.', '\\', '^', '$', '[', ']']
def regexstrip(string, _strip):
if _strip == '' or _strip == ' ':
_strip = r'\s'
elif _strip in respecchar:
_strip = r'\'+_strip'
print(_strip) #just for troubleshooting
re_strip = re.compile('^'+_strip+'*(.+)'+_strip+'*$')
print(re_strip) #just for troubleshooting
mstring = re_strip.search(string)
print(mstring) #just for troubleshooting
stripped = mstring.group(1)
print(stripped)
关于这段代码,我不太理解
两条if\elif语句仅在_strip参数不存在时检查该参数,即函数上方respechar列表中给定的空格或符号。这家伙声称,即使你把一封信作为第二个参数,代码仍然有效,评论部分甚至没有人质疑它。为什么
我想问的第二件事是关于elif语句下的行:strip=r'+\u strip'字符串不是在第二个引号后结束吗(因为它只以一个引号开始)?为什么整个字符串只有在+带部分结束后才结束 提前谢谢你 两条if\elif语句仅在_strip参数不存在时检查该参数,即函数上方respechar列表中给定的空格或符号。这家伙声称,即使你把一个字母作为第二个参数,代码仍然有效 这是因为这些字符是正则表达式中唯一需要特殊处理的字符。如果它是一个普通的字母,它可以完全按照原样作为正则表达式的一部分使用
strip = r'\'+_strip'
那是个打字错误。尾随的
“
不应该在那里。我不明白那一行到底是哪一行?正确的字符没有被去除,因为图案以星号结尾,表示最后的去除字符是可选的。正则表达式在默认情况下是贪婪的,这意味着*(.+)
模式将尽可能多地匹配,因此它将匹配到字符串的末尾,没有留下任何东西作为最后的strip字符来匹配。我不知道他为什么那样做。如果模式不以strip char结尾,那就失败了。加号。Plus意味着它必须在末尾有strip字符。@WilliamFrog8因为
匹配除换行符以外的任何字符(不管您的通配符首选项是什么),并且+
匹配一个或多个
字符,所以+
中的?
使它成为可选的;无或1个或多个匹配项。