我可以使用负前瞻来提高简单性来查找文件路径中的最后一个文件夹吗?
Can I improve simplicity using negative lookahead to find the last folder in a file path?
我正在尝试找到一个更简单的解决方案来定位文件列表中的最后一个文件夹路径,该文件列表不包含文件类型,但必须使用环视。谁能解释一下我的正则表达式代码中的一些改进?
搜索文字:
c:\this\folder\goes\findme.txt
c:\this\folder\cant\findme.doc
c:\this\folder\surecanfind.txt
c:\anothertest.rtf
c:\t.txt
正则表达式:
(?<=\)[^\\n\r]+?(?=\[^\]*\.)(?!.*\.doc)
预期结果:
‘goes’
‘folder’
能否改进和简化 RegEx 前瞻?感谢您的帮助。
在您的原始正则表达式中:
(?<=\)[^\\n\r]+?(?=\[^\]*\.)(?!.*\.doc)
在环顾四周的使用方面确实没有太多需要改进的地方。
正向后看对于告诉正则表达式何时允许开始匹配是必要的。
正向展望对于终止 +?
量词的扩展是必要的。
并且需要消极的前瞻来否定无效的匹配。
您或许可以将两种展望浓缩为一种。但是将它们分开会更有效,因为如果一个评估失败,它可以跳过第二个评估。
但是,如果您正在寻找更高效的/"normal" 正则表达式,我通常会使用如下内容:
^.*\(.+?)\[^\]+\.(?!doc).+$
我不会使用环视来排除除了我想要的匹配输出之外的所有内容,而是将我想要的输出包含在捕获组中。
这让我可以告诉正则表达式每行只检查一次匹配,而不是 \
个字符。
然后,为了获得我想要的输出,我所要做的就是从每个匹配中获取捕获组 1 的内容。
orignal(98,150 步)
Capture Groups(66,586 步)
希望对您有所帮助
我正在尝试找到一个更简单的解决方案来定位文件列表中的最后一个文件夹路径,该文件列表不包含文件类型,但必须使用环视。谁能解释一下我的正则表达式代码中的一些改进?
搜索文字:
c:\this\folder\goes\findme.txt
c:\this\folder\cant\findme.doc
c:\this\folder\surecanfind.txt
c:\anothertest.rtf
c:\t.txt
正则表达式:
(?<=\)[^\\n\r]+?(?=\[^\]*\.)(?!.*\.doc)
预期结果:
‘goes’
‘folder’
能否改进和简化 RegEx 前瞻?感谢您的帮助。
在您的原始正则表达式中:
(?<=\)[^\\n\r]+?(?=\[^\]*\.)(?!.*\.doc)
在环顾四周的使用方面确实没有太多需要改进的地方。
正向后看对于告诉正则表达式何时允许开始匹配是必要的。
正向展望对于终止 +?
量词的扩展是必要的。
并且需要消极的前瞻来否定无效的匹配。
您或许可以将两种展望浓缩为一种。但是将它们分开会更有效,因为如果一个评估失败,它可以跳过第二个评估。
但是,如果您正在寻找更高效的/"normal" 正则表达式,我通常会使用如下内容:
^.*\(.+?)\[^\]+\.(?!doc).+$
我不会使用环视来排除除了我想要的匹配输出之外的所有内容,而是将我想要的输出包含在捕获组中。
这让我可以告诉正则表达式每行只检查一次匹配,而不是 \
个字符。
然后,为了获得我想要的输出,我所要做的就是从每个匹配中获取捕获组 1 的内容。
orignal(98,150 步)
Capture Groups(66,586 步)
希望对您有所帮助