我试图从文本文档中提取文件路径(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/

10-09 13:33