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