我正在尝试使用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);
}
}
答案 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(非贪婪)匹配。