我试图从文本文档中提取文件路径(Windows/Ubuntu,relative/absolute)。
下面的正则表达式代码用于检查单词是否是文件路径。
它可以在大多数情况下工作,但在一种情况下失败,即进入无限循环。对此有什么解释吗?
import re
path_regex = re.compile(r'^([\.]*)([/]+)(((?![<>:"/\\|?*]).)+((?<![ .])(\\|/))?)*$' , re.I)
text = '/var/lib/jenkins/jobs/abcd-deploy-test-environment-oneccc/workspace/../workspace/abcd-deploy-test-environment.sh'
path_regex.search(text)
最佳答案
确实存在一个问题。
您已经将子表达式与虚假的限定符混合在一起。
在斜线之间修改所需的部分
使用此^([\.]*)([/]+)((?:[^<>:"/\\|?*.\r\n]|\.(?![\\/]))[\\/]?)*$
我的想法是看看你在防范什么。
守卫是你允许向前或向后的斜杠,如果没有一个点。
因此,您必须将点与/
然后用一个单独的替代词来限定它们。
如果你这样做,事情总会过去的。
^
( [\.]* ) # (1)
( [/]+ ) # (2)
( # (3 start)
(?: # Group start (required between slashes)
[^<>:"/\\|?*.\r\n] # Any character, but exclude these
| # or,
\. # The dot, if not followed by forward or back slash
(?! [\\/] )
) # Group end
[\\/]? # Optional forward or back shash
)* # (3 end)
$
关于python - python中的re.search()进入无限循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42374498/