Regex 使用正则表达式查看文件名是否也是路径名的一部分
我想做一些看似简单的事情,但我可能最终会编写一个程序来进行搜索 我在VB.NEt中从事许多项目。文件夹结构是我假设的相当常见的结构。例如,我的项目的一部分称为“SalesLabrary”,那么它将具有以下文件夹结构:Regex 使用正则表达式查看文件名是否也是路径名的一部分,regex,Regex,我想做一些看似简单的事情,但我可能最终会编写一个程序来进行搜索 我在VB.NEt中从事许多项目。文件夹结构是我假设的相当常见的结构。例如,我的项目的一部分称为“SalesLabrary”,那么它将具有以下文件夹结构: <Projects Folder>\SalesLibrary\SalesLibrary 我想弄清楚的是如何构建一个正则表达式,我可以使用它来选择文件名(不带扩展名)与其路径中的一个组件匹配的文件(即\SalesLibrary\SalesLibary.dll),如果是,
<Projects Folder>\SalesLibrary\SalesLibrary
我想弄清楚的是如何构建一个正则表达式,我可以使用它来选择文件名(不带扩展名)与其路径中的一个组件匹配的文件(即\SalesLibrary\SalesLibary.dll
),如果是,则返回true。在上面的第一个文件中,SalesLibrary在其路径中多次存在,并将被选中
我的ReXEX技能低于标准杆,我真的很难用这个。或者,我一直想要一个学习Java的理由。下面是一个简单的方法:
方法一 反转字符串,使用上述方法
@"lld.yrarbiLselaS\yrarbiLselaS\foo\:C"
@"C:\foo\SalesLibrary\SalesLibrary.dll"
(?<= # positive look-behind, i.e. it must be true that:
^ # start-of-string
(?: # non-capturing group, matches a path component
(?!\1) # look-ahead: anything but group 1 is allowed
[^\\]* # match it
\\ # a backslash
)* # end group, repeat
\1 # match the filename again (see note below)
) # end look-behind
^[^.]+\([^\\]+)
,这是
^ # start-of-string
[^.]+ # extension
\. # a dot
([^\\]+) # filename (anything but backslashes), capture to group 1
(?:\\(?!\1)[^\\]+)*
,即:
(?: # non-capturing group, matches one path component
\\ # a backslash
(?!\1) # look-ahead: anything but group 1 is allowed
[^\\]+ # match it
)* # end group, repeat
$ # end-of-string
^[^.]+\.([^\\]+)(?:\\(?!\1)[^\\]+)*$
如果匹配,则文件名不会在路径中的任何其他位置重复。(之前不要忘记反转路径。)
方法二 使用.NET正则表达式引擎的可变长度查找功能从末尾向上滚动字符串
@"lld.yrarbiLselaS\yrarbiLselaS\foo\:C"
@"C:\foo\SalesLibrary\SalesLibrary.dll"
(?<= # positive look-behind, i.e. it must be true that:
^ # start-of-string
(?: # non-capturing group, matches a path component
(?!\1) # look-ahead: anything but group 1 is allowed
[^\\]* # match it
\\ # a backslash
)* # end group, repeat
\1 # match the filename again (see note below)
) # end look-behind
([^\\]+)\.[^.]+$
,即
([^\\]+) # filename (anything but backslashes), capture to group 1
\. # a dot
[^.]+ # extension
$ # end-of-string
@"lld.yrarbiLselaS\yrarbiLselaS\foo\:C"
@"C:\foo\SalesLibrary\SalesLibrary.dll"
(?<= # positive look-behind, i.e. it must be true that:
^ # start-of-string
(?: # non-capturing group, matches a path component
(?!\1) # look-ahead: anything but group 1 is allowed
[^\\]* # match it
\\ # a backslash
)* # end group, repeat
\1 # match the filename again (see note below)
) # end look-behind
(?到目前为止您尝试了什么,为什么/在什么情况下失败了?此信息可帮助我们确定您的错误所在。(因为除非我在这里遗漏了什么,否则使用正则表达式在字符串中查找简单的单词并不难。)@Tomalak假设示例路径被反斜杠分割,比如\1\2\3\4\5.dll
我想他要求一个正则表达式来测试“如果5==4或5==3或5==2或5==1”。因此SalesLibrary\SalesLibrary.dll
将匹配,并且SalesLibrary\SalesTaxLibrary.dll
将失败。是的,测试字符串中的单词,但该单词是从字符串中提取的。听起来确实是一种简单的解决方法,但这项工作的一部分是学习更多的正则表达式。