【问题标题】:Need to fix my regex需要修复我的正则表达式
【发布时间】:2014-10-17 02:55:13
【问题描述】:

我正在尝试将字符串与regex 模式匹配,但遇到了一些问题。

我的字符串可能只有 3 种正确的形式:

  1. [dbo].[开始]
  2. dbo.Start
  3. 开始

这是我的正则表达式:

"^((\[)?dbo(\])?)?(\.)?(\[)?Start(\])?$"

所有 3 种形式都返回成功,但还有更多选项,例如:[dboStartdbo[Start

我知道这是因为它是可选的,但是我如何在设置可选时创建依赖关系,这样如果一个可选有值,那么第二个可选也必须有一个值。

你能帮我解决这个问题吗?

谢谢。

【问题讨论】:

  • @hex494D49 不,这与 3 种形式相匹配。
  • @hex494D49 我编辑了我的问题。我可以得到任何字符串。但只有我指定的 3 个值是正确的。任何其他字符串都会返回 false。

标签: c# sql regex


【解决方案1】:

两个想法:

1.) 替代模式

^(?:\[dbo\]\.\[Start\]|(?:dbo\.)?Start)$

test at regex101


2.) 如果支持conditionals

^(?:(\[)?dbo(?(1)\])\.)?(?(1)\[)Start(?(1)\])$

这里第一个开场[ 在第一个捕获组中被捕获。其他 [] 取决于 $1 的匹配。

test at regex101.

【讨论】:

    【解决方案2】:

    试试这个:

     string str = dt.Rows[0]["str"].ToString();
                 //here dt.Rows[0]["str"].ToString();   is the datatable value for a particular row                
    
     str = Regex.Replace(str, @"[[]", String.Empty);
     str = Regex.Replace(str, @"[]]", String.Empty);
     str = Regex.Replace(str, @"[.]", String.Empty);
     string result = str;
    

    希望对您有所帮助!

    【讨论】:

      【解决方案3】:

      另一种解决方案

      /(.*?(?<=^|\.)\[?Start\]?)/g
      

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-16
        • 1970-01-01
        • 2011-07-03
        • 2014-02-16
        • 1970-01-01
        • 2014-01-29
        • 2020-01-23
        相关资源
        最近更新 更多