Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python strip()正则表达式替换说明_Python_Regex - Fatal编程技术网

Python strip()正则表达式替换说明

Python strip()正则表达式替换说明,python,regex,Python,Regex,我正在编写《用Python自动化无聊的东西》教科书中的regex替换strip()程序,因为我甚至不知道如何开始,我选择了堆栈溢出,并找到了一个包含以下代码的线程: #!python3 import re respecchar = ['?', '*', '+', '{', '}', '.', '\\', '^', '$', '[', ']'] def regexstrip(string, _strip): if _strip == '' or _strip == ' ':

我正在编写《用Python自动化无聊的东西》教科书中的regex替换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个或多个匹配项。