【问题标题】:Regex to get filename / exclude certain characters from the match正则表达式获取文件名/从匹配中排除某些字符
【发布时间】:2013-09-28 05:55:03
【问题描述】:

这是我的文件:

name.extension

这是我的正则表达式:

.*[.]

但是这匹配文件名和句点:

#=> "filename."

如何排除句号才能达到:

#=> "filename"

我正在使用 Ruby。

【问题讨论】:

  • 如果你的文件名本身有句号怎么办?
  • 文件名不能有句点...包括 Windows Explorer 和 osx Finder 在内的所有程序都不允许它,所以我认为这不是问题。不过,我可能是错的,如果您有更强大的解决方案,我很想听听
  • 好吧,我刚刚创建了一个带有句点的文件名。您在哪里看到文件名中不能有句点?
  • @Starkers:.s 在包括 OS X 在内的许多操作系统中都是有效的文件名字符。
  • 很公平!才意识到。 js.min 之类的。好尴尬

标签: ruby regex io


【解决方案1】:

你可以使用File类方法File#basenameFile#extname

file= "ruby.rb"
File.basename(file,File.extname(file))
# => "ruby"

【讨论】:

    【解决方案2】:

    你只需要一个否定的字符类:

    ^[^.]*
    

    这将匹配所有内容,从字符串的开头直到找到一个句点(但不包括它)。

    【讨论】:

    • 几乎,但这匹配除了句点之外的所有内容。这匹配前面但不包括句点的所有内容:^[^.]*
    • @Starkers。我没有收到你的评论。
    • @Starkers。是的,我意识到了这一点,并且已经编辑了正则表达式。
    【解决方案3】:

    匹配到最后一个“.”

     "filen.ame.extension"[/.*(?=\.)/]
      # => filen.ame
    

    匹配第一个“.”

     "filen.ame.extension"[/.*?(?=\.)/]
     # => filen
    

    【讨论】:

      【解决方案4】:

      或者,您可以在正则表达式中创建子组,然后选择第一个:

      str = 'name.extension'
      p str[/(.*)[.]/,1] #=> name
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-28
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        • 1970-01-01
        • 2017-11-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多