【问题标题】:Perl regular expression to remove all except last occurrencePerl 正则表达式删除除最后一次出现之外的所有内容
【发布时间】:2014-05-03 00:53:26
【问题描述】:

我正在尝试使用命令行“重命名”来更改一些包含多个句点的文件名。例如:this.is.a.file.name.txt

环顾四周后,我发现了一些几乎可以让我到达那里的示例,但我似乎无法让它按要求工作。不用说,我是一个非常熟悉正则表达式的初学者。

我试过了:

rename -v -n 's/\.(.+?)(?=\.)//' this.is.a.file.name.txt

结果如下:

this.a.file.name.txt

我尝试修改以下资源中的示例,但我被卡住了。 PHP Regex: Select all except last occurrence Regex not replacing the last occurrence of a match

【问题讨论】:

  • 您能否提供一个更清晰的示例来说明输入和所需输出是什么?您是否要删除文件扩展名以外的所有内容?
  • @willOEM 是的,没错,我只想保留文件扩展名。所以想要的结果是:thisisafilename.txt

标签: regex perl


【解决方案1】:

由于几个原因,您的正则表达式不太正确。首先,您要替换空字符串的内容应该只是句点,而您正在从句点匹配下一个句点的所有内容并将其删除。而且,你只做一次。

你想要的正则表达式是/\.(?=.*\.)//g,它表示匹配一个句点,然后是任意数量的字符的零宽度断言和另一个句点,并尽可能多地这样做。

【讨论】:

  • 这非常有效。我只是在前面加上“s”并收到此验证:$ rename -n -v 's/\.(?=.*\.)//g' sdv.sdgs.hsdgh.sdg.sdfsdv.sdgs.hsdgh.sdg.sdf renamed as sdvsdgshsdghsdg.sdf
猜你喜欢
  • 2013-04-18
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 2016-12-20
  • 2018-05-26
  • 2019-04-15
相关资源
最近更新 更多