C# 正则表达式搜索给出 false
C# Regular expression search gives false
我想做一个程序来搜索文本文件中的某些标签,看看这些标签之间是否有文本。下面的标签示例。
--<UsrDef_Mod_Trigger_repl_BeginMod>
--<UsrDef_Mod_Trigger_repl_EndMod>
所以我想搜索 --<UsrDef_Mod_
和 _Begin
或 _End
我制作了这些 RegExp,但每一个我都弄错了。
if (Regex.Match(line, @"/--<UsrDef_Mod_.*_BeginMod>/g", RegexOptions.None).Success)
else if (Regex.Match(line, @"/--<UsrDef_Mod_.*_EndMod>/g", RegexOptions.None).Success)
所以任何帮助找出我哪里出错了。我已经使用 regexr.com 来检查我的正则表达式并在那里找到匹配项,但在 C# 中没有。
.NET 库 Regex 不理解 "/ /g"
包装器。
只需删除它:
// Regex.Match(line, @"/--<UsrDef_Mod_.*_BeginMod>/g",
Regex.Match(line, @"--<UsrDef_Mod_.*_BeginMod>",
if (Regex.Match(line, @"--<UsrDef_Mod_.*_BeginMod>", RegexOptions.None).Success)
if (Regex.Match(line, @"--<UsrDef_Mod_.*_EndMod>", RegexOptions.None).Success)
两者都匹配 - 您只需删除 /-- 和 /g 选项 -
根据 Henk Holtermann 的回答 - a comparison of perl and c# regex options on SO - 供进一步参考。
var matches = Regex.Matches(text, @"<UsrDef_Mod_([a-zA-Z_]+)_BeginMod>([\s\S]+?)<UsrDef_Mod__EndMod>");
if (matches != null)
foreach (Match m in matches)
Console.WriteLine(m.Groups[2].Value);
第 2 组将包含两个标签内的文本。
我想做一个程序来搜索文本文件中的某些标签,看看这些标签之间是否有文本。下面的标签示例。
--<UsrDef_Mod_Trigger_repl_BeginMod>
--<UsrDef_Mod_Trigger_repl_EndMod>
所以我想搜索 --<UsrDef_Mod_
和 _Begin
或 _End
我制作了这些 RegExp,但每一个我都弄错了。
if (Regex.Match(line, @"/--<UsrDef_Mod_.*_BeginMod>/g", RegexOptions.None).Success)
else if (Regex.Match(line, @"/--<UsrDef_Mod_.*_EndMod>/g", RegexOptions.None).Success)
所以任何帮助找出我哪里出错了。我已经使用 regexr.com 来检查我的正则表达式并在那里找到匹配项,但在 C# 中没有。
.NET 库 Regex 不理解 "/ /g"
包装器。
只需删除它:
// Regex.Match(line, @"/--<UsrDef_Mod_.*_BeginMod>/g",
Regex.Match(line, @"--<UsrDef_Mod_.*_BeginMod>",
if (Regex.Match(line, @"--<UsrDef_Mod_.*_BeginMod>", RegexOptions.None).Success)
if (Regex.Match(line, @"--<UsrDef_Mod_.*_EndMod>", RegexOptions.None).Success)
两者都匹配 - 您只需删除 /-- 和 /g 选项 - 根据 Henk Holtermann 的回答 - a comparison of perl and c# regex options on SO - 供进一步参考。
var matches = Regex.Matches(text, @"<UsrDef_Mod_([a-zA-Z_]+)_BeginMod>([\s\S]+?)<UsrDef_Mod__EndMod>");
if (matches != null)
foreach (Match m in matches)
Console.WriteLine(m.Groups[2].Value);
第 2 组将包含两个标签内的文本。