短划线( - )后从图像文件名中删除所有字符

时间:2012-10-30 11:23:59

标签: regex filenames

我有大约1400张这样的照片。

101018-202x300.jpg
100116-215x300.jpg
1000748-300x157.jpg
100138-196x300.jpg
100308-companion-in-surgical-studies-208x300.jpg
100463-Ambroise-Pare-300x216.jpg
100523-Grulee-collection-pediatrics-194x300.jpg

我需要删除 FIRST 短划线后的所有字符,以便它显示为

101018.jpg
100116.jpg
1000748.jpg
100138.jpg
100308.jpg
100463.jpg
100523.jpg

我知道这可以用正则表达式完成,但我不知道从哪里开始呢?

我很忙working through this Regex Site to learn more about the topic.

谢谢。

编辑:道歉,我没有添加其他更多变化的例子。

3 个答案:

答案 0 :(得分:0)

您可以重命名捕获101018并重命名您使用的文件。 NEW (Demo)

OLD (Demo)

(\d+)[\w-]+\.jpg

编辑:第二个选项是按“ - ”拆分并获取第一个参数。

答案 1 :(得分:0)

在PowerShell中:

$_ -replace '-.*(?=\.\w+$)'

e.g。

PS> -split'101018-202x300.jpg
>> 100116-215x300.jpg
>> 1000748-300x157.jpg
>> 100138-196x300.jpg' | %{ $_ -replace '-.*(?=\.\w+$)'}
>>
101018.jpg
100116.jpg
1000748.jpg
100138.jpg

如果您只有JPEG,或者它总是连字符和点之间的部分,您可以简化正则表达式:

-[^.]+

答案 2 :(得分:0)

使用shell和sed ..

for i in $(ls /path/to/your/images)

do

mv $i $(echo $i | sed -r 's/([0-9]\*)\-.*\.jpg/\1.jpg/g')

done

让我解释一下这会做什么。 for loop将为每次迭代获取一个文件 echo $i | sed -r 's/([0-9]*)\-.*\.jpg/\1.jpg/g'用于将文件名更改为所需的输出。