Regex 使用正则表达式匹配最后一个反斜杠之前的字符

Regex 使用正则表达式匹配最后一个反斜杠之前的字符,regex,delphi,path,delphi-2010,Regex,Delphi,Path,Delphi 2010,我正在尝试制作一个关于重命名文件的Delphi项目,不知怎的,我找到了一个正则表达式来匹配文件名最后一个反斜杠之后的所有字符:[^\\]+$,地址:。但在路径名的最后一个反斜杠之前,我找不到匹配所有字符的正则表达式代码 我找到了以下示例,但无法修改反斜杠和所有字符。 [^/]+?=/[^/]+$ 我正在使用Delphi2010 我的正则表达式引擎是正则表达式定向的NFA 我的示例字符串是 D:\belgelerD\delphi\u项目\u重命名器\12\test\u文件\Yeni Metin B

我正在尝试制作一个关于重命名文件的Delphi项目,不知怎的,我找到了一个正则表达式来匹配文件名最后一个反斜杠之后的所有字符:[^\\]+$,地址:。但在路径名的最后一个反斜杠之前,我找不到匹配所有字符的正则表达式代码

我找到了以下示例,但无法修改反斜杠和所有字符。 [^/]+?=/[^/]+$

我正在使用Delphi2010

我的正则表达式引擎是正则表达式定向的NFA

我的示例字符串是 D:\belgelerD\delphi\u项目\u重命名器\12\test\u文件\Yeni Metin Belgesi.txt

我想让它匹配 D:\belgelerD\delphi\u项目\u重命名器\12\test\u文件\


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


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

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

要捕获反斜杠,即最后一个反斜杠之前的所有内容,可以执行类似^.+\\的操作,该操作应捕获从字符串开始^到最后一个反斜杠的所有内容

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


注意:我不确定Delphi的regexp引擎是什么样的,因此您可能需要将括号转义,以使其作为组分隔符工作。

您知道Delphi中包含哪些内容吗

例如,在您的示例中,要从D:\belgelerD\delphi\u项目\u重命名器\12\test\u文件\D:\belgelerD\delphi\u项目\u重命名器\12\test\u文件\Yeni-Metin-Belgesi.txt中获取D:\belgelerD\delphi\u项目\u重命名器\12\test\u文件\string,您可以使用该函数。

此模式:^.*.[\\/] 将为您提供以下结果:

匹配项:

0:D:\belgelerD\delphi\u项目\u重命名器\12\test\u文件\ 1:D:\belgelerD\delphi\u项目\u重命名器\12\test\u文件 2: \ 此模式:^.*[\\\/] 将为您提供以下结果:

匹配项:

0:D:\belgelerD\delphi\u项目\u重命名器\12\test\u文件\ 1:D:\belgelerD\delphi\u项目\u重命名器\12\test\u文件\ 模式1将给出最后一个斜杠之前的所有内容,不包括最后一个斜杠。
模式2将给出最后一个斜杠之前的所有内容,包括最后一个斜杠。

您原来的正则表达式似乎解决了您的问题-您想要最后一个反斜杠之后的所有内容,不是吗?另外,为什么不使用WindowsAPI目录函数来增强健壮性呢?