Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.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 是否有用于匹配和替换的单一功能?_Python_Regex - Fatal编程技术网

Python 是否有用于匹配和替换的单一功能?

Python 是否有用于匹配和替换的单一功能?,python,regex,Python,Regex,我想知道是否有更简单的替代方法(例如,单个函数调用)来匹配和替换以下示例: >>> import re >>> >>> line = 'file:///windows-d/academic%20discipline/study%20objects/areas/formal%20systems/math' >>> >>> match = re.match(r'^file://(.*)$', line) &

我想知道是否有更简单的替代方法(例如,单个函数调用)来匹配和替换以下示例:

>>> import re
>>> 
>>> line = 'file:///windows-d/academic%20discipline/study%20objects/areas/formal%20systems/math'
>>> 
>>> match = re.match(r'^file://(.*)$', line)
>>> if match and match.group(1):
...     substitution = re.sub(r'%20', r' ', match.group(1))
... 
>>> substitution
'/windows-d/academic discipline/study objects/areas/formal systems/math'

谢谢。

我想避开你的正则表达式问题,建议你使用其他方法:

>>> line = 'file:///windows-d/academic%20discipline/study%20objects/areas/formal%20systems/math' 
>>> import urllib
>>> urllib.unquote(line)
'file:///windows-d/academic discipline/study objects/areas/formal systems/math'
然后,只需用一个切片剥离
文件://
,或
str。如有必要,替换


%20
(空格)不是此处唯一可能的转义字符,因此最好使用正确的工具执行此作业,而不是在以后有另一个字符需要取消转义时让正则表达式解决方案中断

您可以尝试下面的简单python代码

>>> import re
>>> line = 'file:///windows-d/academic%20discipline/study%20objects/areas/formal%20systems/math'
>>> m = re.sub(r'%20|file://', r' ', line).strip()
>>> m
'/windows-d/academic discipline/study objects/areas/formal systems/math'
re.sub(r'%20 | file://',r',line).strip()
code用空格替换字符串
%20
file://
。再次使用
strip()
函数删除所有前导空格和尾随空格

>>> import re
>>> s = 'file:///windows-d/academic%20discipline/study%20objects/areas/formal%20systems/math'
>>> re.sub(r'^file://(.*)$', lambda m: m.group(1).replace('%20', ' '), s)
'/windows-d/academic discipline/study objects/areas/formal systems/math'


预期的输出是什么?准确地显示在输出中。您的意思是这<代码>/windows-d/学科/学习对象/领域/正式系统/数学?是的@AvinashRajA simple
s.replace(“%20”和“”)
也会这样做(但是@wim的答案在这种特殊情况下显然更好)。
>>> s = 'file:///windows-d/academic%20discipline/study%20objects/areas/formal%20systems/math'
>>> s.replace('file://', '').replace('%20', ' ')
'/windows-d/academic discipline/study objects/areas/formal systems/math'