【问题标题】:c# regrex for a string repeated multiple timesc# 用于重复多次的字符串的正则表达式
【发布时间】:2019-10-25 07:45:42
【问题描述】:

我想对输出如下的字符串有一个正则表达式:

CP_RENOUNCEABLE
CP_RIGHTS_OFFER_TYP
CP_SELLER_FEED_SOURCE
CP_SELLER_ID_BB_GLOBAL
CP_PX
CP_RATIO
CP_RECLASS_TYP

我尝试使用正则表达式 字符串模式 = @"ISNULL(*)";

string strSearch = @" 
                LTRIM(RTRIM(ISNULL(CP_RENOUNCEABLE,'x2x'))), ISNULL(CP_RIGHTS_OFFER_TYP,-1), LTRIM(RTRIM(ISNULL(CP_SELLER_FEED_SOURCE,'x2x'))),
                 LTRIM(RTRIM(ISNULL(CP_SELLER_ID_BB_GLOBAL,'x2x'))),ISNULL(CP_PX,-1), ISNULL(CP_RATIO,-1), ISNULL(CP_RECLASS_TYP,-1);

  string pattern = @"ISNULL(*\)";            

 foreach (Match match in Regex.Matches(strSearch, pattern))
            {
                if (match.Success && match.Groups.Count > 0)
                {
                    var text = match.Groups[1].Value;

                }
            }

【问题讨论】:

    标签: c# regex regex-negation regex-group regex-greedy


    【解决方案1】:

    我的猜测是,我们在问题中列出我们想要的输出之后会有一个逗号,那么这个简单的表达式可能就足够了,

    (CP_[A-Z_]+),
    

    Demo 1

    如果我的猜测不正确,并且后面还有其他字符(例如空格),我们可以在捕获组的右侧添加一个 char 类,例如:

    (CP_[A-Z_]+)[,\s]
    

    我们会在[,\s] 中添加我们想要的字符串之后可能出现的任何字符。

    Demo 2

    测试

    using System;
    using System.Text.RegularExpressions;
    
    public class Example
    {
        public static void Main()
        {
            string pattern = @"(CP_[A-Z_]+),";
            string input = @"LTRIM(RTRIM(ISNULL(CP_RENOUNCEABLE,'x2x'))), ISNULL(CP_RIGHTS_OFFER_TYP,-1), LTRIM(RTRIM(ISNULL(CP_SELLER_FEED_SOURCE,'x2x'))),
                     LTRIM(RTRIM(ISNULL(CP_SELLER_ID_BB_GLOBAL,'x2x'))),ISNULL(CP_PX,-1), ISNULL(CP_RATIO,-1), ISNULL(CP_RECLASS_TYP,-1);";
            RegexOptions options = RegexOptions.Multiline;
    
            foreach (Match m in Regex.Matches(input, pattern, options))
            {
                Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
            }
        }
    }
    

    编辑:

    为了捕获ISNULL 和第一个逗号之间的内容,这可能有效:

    ISNULL\((.+?),
    

    Demo 3

    【讨论】:

    • 嗨,艾玛,很抱歉造成混乱。我想要“ISNULL(”和下一个“,”之间的子字符串之间的字符串。所以我的正则表达式应该类似于“”ISNULL(*)”。不太确定我应该使用的确切正则表达式是什么?我希望这是有道理的.
    • 这正是我所需要的。谢谢!我真的很感激。
    猜你喜欢
    • 2011-06-06
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2011-03-27
    • 1970-01-01
    相关资源
    最近更新 更多