我正在尝试使用powershell中的regex基于文件名命名文件夹。
该名称类似于tester2-2013-14-10.txt
。
说到该文件名,我想创建一个名为tester2
的文件夹。它将对目录中的所有文件执行此操作。基本上正则表达式需要读取直到第一个' - ',然后忽略所有其他字符。它
我正在尝试的所有正则表达式都没有做过这样的事情。
以下是我正在尝试使用(\w+)\.txt
的正则表达式。
这是我尝试实施它的时候:
Get-ChildItem | Where{$_.Name -match '(\w+)\.txt'} | ForEach-Object{
md $matches[1]}
与此类事物的其他变体一起。
当我针对此正则表达式运行文件名时,它正在使用字符串的结尾。例如在tester2-2013-14-10.txt
的情况下。正在创建的文件夹名称称为10
,而不是Tester2
。
感谢帮助!
答案 0 :(得分:2)
尝试以下正则表达式
^(\w+)-.*\.txt
有关验证和说明,请参阅regex101 demo。
简短说明
^
匹配行或字符串的开头。它将确保匹配应该在一行的开头。
因此^(\w+)
将匹配文件名中的第一个单词。然后必须跟随-
和任何字符,直到.txt
你的正则表达式有什么问题?
(\w+)\.txt
会立即匹配单词(\w+)
,然后是.txt
。
因此,您将获得最后一个词而不是第一个词。