此正则表达式 - (.*).ap(.\d*)$
- 适用于在线正则表达式工具(例如,工作here),但不适用于C#。
意图是对于以.ap<some numbner>
(.ap
后跟一些数字 - .ap1,.ap123等)结尾的字符串,我们想要捕获最后一个{{1}左边的所有内容。 1}}以及最后.ap
右侧的所有内容。例如,对于.ap
,我们想要捕获abcfile.csv.ap123
和abcfile.csv
。
123
按照预期在在线工具中捕获这两个组,但在C#中,它捕获整个名称(在上面的示例中捕获abcfile.csv.ap123)。
C#代码是 -
(.*).ap(.\d*)$
match.Success为true但match.Captures.Count为1且match.Captures [0] .Value包含整个文件名(我在手表中看着这个)。
这里可能有什么问题?
更多示例 -
答案 0 :(得分:5)
答案 1 :(得分:1)
看起来有效:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication42
{
class Program
{
static void Main(string[] args)
{
string[] filenames = {
"TestCashFile_10_12-25-2016_D.csv", // - Shouldn't match
"TestCashFile_10_12-25-2016_D_A.csv.ap123", // - Should match and capture TestCashFile_10_12-25-2016_D_A.csv and 123
"TestCashFile_10_12-25-2016_D_A.csv.ap123.ds", // - Shouldn't match
"TestCashFile_10_12-25-2016_D.csv.ap2.ap1" //- Should match and capture TestCashFile_10_12-25-2016_D.csv.ap2 and 1
};
string renameSuffix = "ap";
string pattern = @"(?'filename'.*)\." + renameSuffix + @"(?'suffix'\d*)$";
foreach (string filename in filenames)
{
Match match = Regex.Match(filename, pattern);
Console.WriteLine("Match : {0}, Filename : {1}, Suffix : {2}", match.Success ? "True" : "False", match.Groups["filename"].Value, match.Groups["suffix"].Value);
}
Console.ReadLine();
}
}
}