有没有人知道如何在文件名中的最后一个下划线之前找到所有字符。
IABU_Real_Egypt_AUS09_012.indd
我需要的结果是IABU_Real_Egypt_AUS09
提前致谢
答案 0 :(得分:7)
/(.*)_/
并获取捕获的值。正则表达式通常是贪婪的,所以它是自动的(你不需要负面的字符类)。
irb(main):007:0> "IABU_Real_Egypt_AUS09_012.indd".match(/(.*)_/)[1]
=> "IABU_Real_Egypt_AUS09"
答案 1 :(得分:2)
怎么样:
(.*?)_[^_]*
然后你想要的结果是在第1组中。(你没有指定一种语言,所以这就是我可以去的。)
有多种方法可以做到这一点;我相信你可以使用前瞻或后仰。我所做的是:
这将涉及一些回溯,所以如果这是一个性能关键的代码片段,你可能需要比我更好地优化它。
更好的解决方案是从字符串的末尾开始并向后计数直到达到下划线,然后将子字符串从0转到该索引。这可能比使用正则表达式更快更清晰。例如,在Java中:
public static String getUpToUnderscore(String str) {
return str.substring(0, str.lastIndexOf('_'));
}
答案 2 :(得分:1)
C#中的非正则表达式示例:
s.Substring(0, s.LastIndexOf('_'))
答案 3 :(得分:0)
假设你有至少1个下划线,你可以这样做:
/(.*_[^_]+)/