我有一个只接受正则表达式进行匹配的系统,因为在我上网查找一些教程之前我从来没有这样做但是我真的很困惑所以我在这里问。
正则表达式需要匹配以下内容:
File.f
File-1.f
在这两种情况下,它必须返回第二种情况.
之前-
或File
之前的内容。{/ p>
我很感激帮助。
由于
答案 0 :(得分:5)
这应该做:
^[^\.\-]+
(英文:匹配必须从字符串的开头开始,包含所有内容,直到找到.
或-
。)
答案 1 :(得分:1)
^([^.-]+).*\.f$
首先^
表示行的开头
()
表示组 - 这是作为第一组捕获并返回的部分(取决于您的语言$1
,\1
或groups()[0]
或group(1)
[]
表示来自 set 字符
[^
表示包含这些字符的集 不,即它是“所有字符,但不是我列出的字符”,与[]
相对,这意味着“没有字符,只有我列出的字符”
+
表示前一个可以从1到无穷大重复。
.
是'任意'单个字符
*
从0到无穷大重复。
\.
表示字符.
(因为。特殊)
f
只是字母f(或字f,实际上)
$
是行尾。
答案 2 :(得分:1)
我不知道你使用的语言是什么,但它们的工作方式基本相同。在C#中,我们将执行以下操作:
List<string> files = new List<string>() {
"File.f",
"File-1.f"
};
Regex r = new Regex(@"^(?<name>[^\.\-]+)");
foreach(string file in files) {
Match m = r.Match(file);
Console.WriteLine(m.Groups["name"]);
}
命名组允许您轻松提取您正在寻找的前缀。以上打印
File
File
在控制台上。
我强烈建议你拿起这本书Mastering Regular Expressions。每个程序员都应该对正则表达式感到满意,而Friedl的书是迄今为止关于这一主题的最佳书籍。它与Perl,Java,.NET和PHP有关,具体取决于您的语言选择。
答案 3 :(得分:0)
我同意Kimvais有一个非常可靠的答案(我不能投票,对不起)
我在阅读他们的答案之前用perl写了它,我想出了这个:
$ string1 =“John.f”; $ string2 =“Eric-1.f”;
$ string1 = ~m / ^([0-9a-zA-Z] +)[.-] / i; 打印1美元。 “\ n \ n \ n” 个;
$ string2 = ~m / ^([0-9a-zA-Z] +)[.-] / i;
打印$ 1。 “\ n \ n \ n” 个;
基本上它与Kimvais的线条相同,只是他会接受任何角色。或 - ,我不确定你是否想看,我的只接受数字或字母然后a。或者 -
祝你好运