正则表达式匹配路径的一部分

时间:2019-09-10 06:20:25

标签: regex

我正在尝试创建正则表达式以匹配文件的路径,但不包括文件本身和驱动器。

c:\foo\bar\baz.txt
C:\FOO\BAR\BAZ.TXT
C:\FoO\BaR\BaZ.TxT
and so on.

Expression should match `foo\bar` (IN any CaSe).

我拥有的基本示例是

\\.*\\

另一个例子是

\\.*(?=\\)

但是我不确定我走的路是否正确。

实时版本在这里:https://regexr.com/4kmu0

5 个答案:

答案 0 :(得分:2)

尝试^[^\\]+\\(.+)\\

说明:

^-字符串的开头

[^\\]+-匹配\以外的一个或多个字符

(.+)-匹配任何一个或多个字符并将其存储在捕获组中

\\-从字面上匹配\

Demo

答案 1 :(得分:1)

\([a-z]。*)\

  

以上表达式将与第1组完全匹配foo\bar

答案 2 :(得分:1)

如果路径的分隔符应为单个反斜杠,则可以使用捕获组并重复匹配\,然后匹配1次以上而不是\

^[^\\\r\n]*\\([^\\\r\n]+(?:\\[^\\\r\n]+)+)\\[^\\\r\n]+$
  • ^字符串的开头
  • [^\\\r\n]*\\不匹配\或换行符,然后匹配\
  • (捕获第1组
    • [^\\\r\n]+匹配1次以上而不是\
    • (?:非捕获组
      • \\[^\\\r\n]+匹配\,然后匹配1次以上,而不是\或换行符
    • )+关闭组并重复1次以上
  • )关闭第1组
  • \\[^\\\r\n]+匹配\,然后匹配1+次而不是\或换行符
  • $字符串结尾

Regex demo

答案 3 :(得分:1)

将执行以下操作:

:\

这将捕获出现在\和最后一个/i之间的所有非空白字符。然后,捕获的组包含必需的文本。

请注意使用s.rstrip('#').partition('-')[2].split('+') s[s.find('-')+1:-2].split('+') 标志来区分大小写。

Demo

答案 4 :(得分:0)

尝试

(?>[a-zA-Z]:\\)(.*)(?>\\.+\..+)
  1. (?> [a-zA-Z]:\):将匹配c:\或d:\,这是非捕获组
  2. (。*)将匹配介于两者之间的所有内容
  3. (?> \。+ .. +),这又是一个非捕获组,匹配baz.txt或file.txt

Demo