【问题标题】:C# Regular expression search gives falseC# 正则表达式搜索给出 false
【发布时间】:2017-11-03 15:01:21
【问题描述】:

我正在尝试做一个程序来搜索文本文件中的某些标签,看看这些标签之间是否有文本。以下标签示例。

--<UsrDef_Mod_Trigger_repl_BeginMod>
--<UsrDef_Mod_Trigger_repl_EndMod>

所以我想搜索--&lt;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# 中没有。

【问题讨论】:

  • 你可以自己试试,例如在这里:regexstorm.net/tester。 BTW 而不是 Regex.Match(...).Success 你也可以使用 Regex.IsMatch
  • 不是试图避免这里的问题,但可能的解决方案是:line.substring(line.indexOf("--

标签: c# regex search text-search


【解决方案1】:

.NET 库 Regex 不理解 "/ /g"wrapper。

删除它:

// Regex.Match(line, @"/--<UsrDef_Mod_.*_BeginMod>/g", 
   Regex.Match(line, @"--<UsrDef_Mod_.*_BeginMod>", 

【讨论】:

  • 我刚刚通过使用 regexstorm.net/tester 自己实现了这一点。在尝试了所有方法之后,我将它们移除了,它确实有效……但是谢谢。
【解决方案2】:
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 - 供进一步参考。

【讨论】:

  • 绝对不能使用/ 分隔符。
【解决方案3】:
var matches = Regex.Matches(text, @"<UsrDef_Mod_([a-zA-Z_]+)_BeginMod>([\s\S]+?)<UsrDef_Mod_\1_EndMod>");
if (matches != null)
    foreach (Match m in matches)
        Console.WriteLine(m.Groups[2].Value);

组 #2 将包含两个标签内的文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 2023-04-10
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多