我正在尝试找到一种更简单的解决方案,以在文件列表中查找最后一个文件夹路径,该文件列表不包含类型文件,但必须使用环顾四周。谁能在我的正则表达式代码中解释一些改进?
搜索文字:
c:\this\folder\goes\findme.txt
c:\this\folder\cant\findme.doc
c:\this\folder\surecanfind.txt
c:\\anothertest.rtf
c:\t.txt
RegEx:
(?<=\\)[^\\\n\r]+?(?=\\[^\\]*\.)(?!.*\.doc)
预期结果:
‘goes’
‘folder’
RegEx前瞻能否得到改进和简化?感谢您的帮助。
答案 0 :(得分:1)
在原始正则表达式中:
(?<=\\)[^\\\n\r]+?(?=\\[^\\]*\.)(?!.*\.doc)
在使用环顾四周方面,实际上并没有太多改进。
当允许正则表达式开始比赛时,必须保持积极的眼神。
要终止+?
量词的扩展,必须积极向前。
而且需要否定的前瞻来否定无效匹配。
您也许可以将两者相互融合。但是将它们分开是更有效的,因为如果对一个进行评估失败,则可以跳过对第二个评估。
但是,如果您要寻找更高效/“正常”的正则表达式,通常会使用以下内容:
^.*\\(.+?)\\[^\\]+\.(?!doc).+$
除了使用环顾四周以排除匹配项中所需输出以外的所有内容,我将所需输出包含在捕获组中。
这使我可以告诉正则表达式每行仅检查一次匹配项,而不用再检查\
字符之后。
然后,要获得所需的输出,我要做的就是从每次比赛中获取捕获组1的内容。
orignal(98,150步)
Capture Groups(66,586步)
希望能帮到您