我正在尝试创建一个关于重命名文件的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\
答案 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)
此模式:^(.*)([\\\/])
会给你这个结果:
匹配:
D:\belgelerD\delphi_projects_renamer\12\test_files\
D:\belgelerD\delphi_projects_renamer\12\test_files
\
此模式:^(.*[\\\/])
会给你这个结果:
匹配:
D:\belgelerD\delphi_projects_renamer\12\test_files\
D:\belgelerD\delphi_projects_renamer\12\test_files\
模式1将为您提供最后一次斜线之前的所有内容,不包括最后一次斜杠 模式2将为您提供最后一个斜杠之前的所有内容,包括最后一个斜杠。