0

我有大约 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

我需要在第一个破折号后去掉所有字符,这样它就可以读起来了

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

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

我正忙于通过这个正则表达式站点来了解有关该主题的更多信息。

谢谢你。

编辑:抱歉,我没有添加其他一些更多样化的例子。

4

3 回答 3

0

您可以重命名捕获 101018 并重命名您使用的文件。新(演示)

旧(演示)

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

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

于 2012-10-30T11:27:18.220 回答
0

在 PowerShell 中:

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

例如

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,或者它始终是连字符减号和点之间的部分,您可以稍微简化一下正则表达式:

-[^.]+
于 2012-10-30T11:27:26.807 回答
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'用于将文件名更改为所需的输出。

于 2012-10-31T15:17:15.310 回答