正则表达式-我从字符串中提取文本的方式是否最简洁?

时间:2019-05-18 15:40:28

标签: c#

我正在尝试使用Regex从忽略大小写的字符串中提取文本。下面是我怎么做的?我有什么需要注意的地方吗?

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string result = Regex.Match(@"inVentoryPassword1234.Txt", @"(?i)(?<=Inventory).*(?=.txt)(?-i)").Value;
        Console.Write(result);
    }
}

https://regex101.com/r/g4cU6D/1/

2 个答案:

答案 0 :(得分:1)

有错误。 .之前的txt应该转义,否则匹配任何字符。

(?i)(?<=Inventory).*(?=\.txt)

此外,测试成功会更安全:

Match match = Regex.Match(@"inVentoryPassword1234.Txt", @"(?i)(?<=Inventory).*(?=\.txt)");
if (match.Success) {
    string result = match.Value;
    Console.Write(result);
}

标志在模式的其余部分有效。但由于没有余数,因此可以删除(?-i)

答案 1 :(得分:1)

我更喜欢使用named groups提取文本。我认为它们更具可读性。这是一个示例:

var source = @"inVentoryPassword1234.Txt";
var pattern = @"Inventory(?<Result>.*?)\.txt";
var match = Regex.Match(source, pattern, RegexOptions.IgnoreCase);
Console.WriteLine(match.Success ? match.Groups["Result"].Value : "Not found");

(?<Result>.*?)是一个具有任意名称“ Result”的命名组,它与任何as few times as possible(非贪婪)匹配。