我需要构建一个Regex(.NET语法)来确定字符串是否以特定值结尾.具体来说,我需要测试一个文件是否具有特定的扩展名(或一组扩展名).
我正在尝试修复的代码使用:
.*\.(png|jpg|gif)$
Run Code Online (Sandbox Code Playgroud)
这在我的场景中失败的比赛非常缓慢(可能是由于回溯.
简单地删除.*(这是因为API仅测试匹配并且不提取任何内容),这使得正则表达式更加高效.
它仍然感觉效率非常低.我错过了一些明显的东西吗?
不幸的是,我没有控制有问题的API所以我需要一个正则表达式才能做到这一点,即使我通常不认为正则表达式是适合这项工作的工具.
我也做了一些测试使用,RegexOptions.RightToLeft并发现我可以从我的测试用例中挤出更多的性能^.*\.(png|jpg|gif)$,但是我找不到RightToLeft在正则表达式字符串中指定选项的方法所以我不认为我可以使用它.
Bli*_*ixt 14
我没有访问C#所以我不能尝试这个...但你应该能够通过强制引擎首先找到字符串的结尾然后匹配扩展来避免太多的回溯:
$(?<=\.(gif|png|jpg))
Run Code Online (Sandbox Code Playgroud)
不过,我不确定后视对性能的影响.
真的,您也可以完全放弃Regex,并使用String.EndsWidth以下内容:
var extensions = new String[] { ".png", ".jpg", ".gif" };
extensions.Any(ext => "something".EndsWith(ext));
Run Code Online (Sandbox Code Playgroud)
我通常觉得在这样的情况下使用简单的字符串函数会更快,而不是试图在运行时和/或开发时间方面找到一种使用高效正则表达式的聪明方法,除非你对知道什么是正则表达式的效率.
| 归档时间: |
|
| 查看次数: |
16533 次 |
| 最近记录: |