在powershell中使用regex根据文件名命名文件夹

在powershell中使用regex根据文件名命名文件夹,regex,powershell,Regex,Powershell,我正在尝试使用powershell中的正则表达式根据文件名命名文件夹 名称类似于tester2-2013-14-10.txt 说到这个文件名,我想创建一个名为tester2的文件夹。它将对目录中的所有文件执行此操作。基本上,正则表达式需要一直读到第一个'-',然后忽略其后的所有其他字符。它 我尝试的所有正则表达式都没有做过这样的事情 这是我试图使用的正则表达式(\w+)\.txt 当我尝试实现它时,它就在这里: Get-ChildItem | Where{$_.Name -match '(\w+

我正在尝试使用powershell中的正则表达式根据文件名命名文件夹

名称类似于
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

谢谢你的帮助

试试下面的正则表达式

^(\w+)-.*\.txt
有关验证和说明,请参阅

简短描述

^
匹配行或字符串的开头。这将确保比赛应该在一条线的起点进行

因此,
^(\w+)
将匹配文件名中的第一个单词。然后它必须后跟
-
和任何字符,直到
.txt

你的正则表达式怎么了?

(\w+)\.txt
将匹配一个单词
(\w+)
,紧接着是
.txt


因此,您得到的是最后一个字而不是第一个字。

先生,您真有魔力,谢谢。我可以麻烦你解释一下我做错了什么,以及它与你的相比如何。我没有在正则表达式的末尾包含“-”,因为我假设“\w+”会一直读到非单词字符。@JohnnyWhisman检查我的编辑。提供的regex演示也很好地解释了这一点。您可以在那里玩并探索更多内容。@JohnnyWhisman
\w
匹配一个单词字符,单词字符大致定义为a到Z(也是a到Z)、0到9和下划线字符。因此,
\w
与连字符/破折号不匹配,
-
@jksah谢谢。对于向我提供regex演示,这是非常有用的。如果文件不在当前文件夹中怎么办?