使用正则表达式在上一个反斜杠之前匹配字符

时间:2011-07-05 15:16:40

标签: regex delphi path delphi-2010

我正在尝试创建一个关于重命名文件的Delphi项目,并且我以某种方式找到了一个正则表达式,以匹配所有字符 最后反斜杠后的文件名:[^\\]+$在此地址:{ {3}}。但我找不到一个正则表达式代码来匹配所有字符前一个反斜杠(路径名)。

我找到了以下示例,但无法修改反斜杠和所有字符。 [^/]+(?=/[^/]+$) Can you read backward in regex?

  • 我正在使用Delphi 2010

  • 我的正则表达式引擎是正则表达式(NFA)

  • 我的示例字符串是
    D:\belgelerD\delphi_projects_renamer\12\test_files\Yeni Metin Belgesi.txt

  • 我希望它匹配
    D:\belgelerD\delphi_projects_renamer\12\test_files\

4 个答案:

答案 0 :(得分:5)

你知道哪个delphi充满了Path manipulation procedures and functions吗?

例如,在您的情况下,要从D:\belgelerD\delphi_projects_renamer\12\test_files\获取D:\belgelerD\delphi_projects_renamer\12\test_files\Yeni Metin Belgesi.txt字符串,您可以使用ExtractFilePath函数。

答案 1 :(得分:2)

首先查看原始正则表达式,[^\]匹配除反斜杠之外的任何内容。在匹配一次或多次后添加加号。最后,最后的美元与字符串的结尾相匹配。因此,这将匹配一系列不是反斜杠的字符,后跟字符串的结尾。由于正则表达式是贪婪的,它将捕获从最后一个反斜杠到字符串结尾的所有内容。

要捕获反转,即在最后一个反斜杠之前的所有内容,您可以执行^.+\\之类的操作,它应该捕获从字符串开头(^)到最终反斜杠的所有内容。

如果您可以使用模式匹配组,那么您可以使用类似^(.+)([^\]+)$的内容来匹配将字符串拆分为两部分,每部分都将存储为不同的匹配组结果。

注意:我不确定Delphi的regexp引擎是什么样的,所以你可能需要转义括号以使它们作为组分隔符工作。

答案 2 :(得分:1)

不确定Delphi正则表达式语法,但这个正则表达式匹配上一个反斜杠之前的所有内容:

^.*(?=\\[^\\]+$

答案 3 :(得分:0)

此模式:^(.*)([\\\/]) 会给你这个结果:

匹配:

  • 0:D:\belgelerD\delphi_projects_renamer\12\test_files\
  • 1:D:\belgelerD\delphi_projects_renamer\12\test_files
  • 2:\

此模式:^(.*[\\\/]) 会给你这个结果:

匹配:

  • 0:D:\belgelerD\delphi_projects_renamer\12\test_files\
  • 1:D:\belgelerD\delphi_projects_renamer\12\test_files\

模式1将为您提供最后一次斜线之前的所有内容,不包括最后一次斜杠 模式2将为您提供最后一个斜杠之前的所有内容,包括最后一个斜杠。