我在c:/dom/xml中有xml文件。我只想搜索所有包含文本或字符串的xml文件,以@"anystring“开头。
示例:下面的标记显示在xml文件中,我需要过滤包含文本的xml文件名。
<parameter ID="**@Id_name	**;	" >
我试过在下面
static void Main(string[] args)
{
string sourceFolder = @"C:\dom\Xml";
string searchWord = "	";
List<string> allFiles = new List<string>();
AddFileNamesToList(sourceFolder, allFiles);
foreach (string fileName in allFiles)
{
string contents = File.ReadAllText(fileName);
if (contents.Contains(searchWord))
{
Console.WriteLine(fileName);
}
}
Console.WriteLine(" ");
System.Console.ReadKey();
}
public static void AddFileNamesToList(string sourceDir, List<string> allFiles)
{
string[] fileEntries = Directory.GetFiles(sourceDir);
foreach (string fileName in fileEntries)
{
allFiles.Add(fileName);
}
//Recursion
string[] subdirectoryEntries = Directory.GetDirectories(sourceDir);
foreach (string item in subdirectoryEntries)
{
// Avoid "reparse points"
if ((File.GetAttributes(item) & FileAttributes.ReparsePoint) != FileAttributes.ReparsePoint)
{
AddFileNamesToList(item, allFiles);
}
}
}但我需要像“@Anystring”这样的词
发布于 2016-01-12 09:07:28
希望下面的代码能对你有所帮助。
static void Main(string[] args)
{
string sourceFolder = @"C:\dom";
string searchWord = "	";
string regexPattern = @"@([A-Za-z0-9\-_]+).\	";
List<string> allFiles = new List<string>();
AddFileNamesToList(sourceFolder, allFiles);
foreach (string fileName in allFiles)
{
string contents = File.ReadAllText(fileName);
if (showMatch(contents, regexPattern))
{
if (contents.Contains(searchWord))
{
Console.WriteLine(fileName);
}
}
}
Console.WriteLine(" ");
System.Console.ReadKey();
}
private static bool showMatch(string text, string expr)
{
Console.WriteLine("The Expression: " + expr);
MatchCollection mc = Regex.Matches(text, expr);
foreach (Match m in mc)
{
Console.WriteLine(m);
}
return mc.Count > 0;
}
public static void AddFileNamesToList(string sourceDir, List<string> allFiles)
{
string[] fileEntries = Directory.GetFiles(sourceDir);
foreach (string fileName in fileEntries)
{
allFiles.Add(fileName);
}
//Recursion
string[] subdirectoryEntries = Directory.GetDirectories(sourceDir);
foreach (string item in subdirectoryEntries)
{
// Avoid "reparse points"
if ((File.GetAttributes(item) & FileAttributes.ReparsePoint) != FileAttributes.ReparsePoint)
{
AddFileNamesToList(item, allFiles);
}
}
}发布于 2016-01-12 08:45:17
您可以将Regex定义如下,并在代码中使用它。
Regex rule = new Regex(@"(\\ |[^ ])+\$#x9\b");可以将代码修改为
static void Main(string[] args)
{
string sourceFolder = @"C:\dom\Xml";
string searchWord = @"(\\ |[^ ])+\$#x9\b";
Regex rule = new Regex(searchWord);
List<string> allFiles = new List<string>();
AddFileNamesToList(sourceFolder, allFiles);
foreach (string fileName in allFiles)
{
string contents = File.ReadAllText(fileName);
if (rule.IsMatch(contents))
{
Console.WriteLine(fileName);
}
}
Console.WriteLine(" ");
System.Console.ReadKey();
}工作小提琴demo
https://stackoverflow.com/questions/34736752
复制相似问题