【问题标题】:how to concat a variable to a regex in C# [closed]如何在 C# 中将变量连接到正则表达式 [关闭]
【发布时间】:2016-11-17 12:25:12
【问题描述】:

我正在尝试将变量连接到 c# 中的 regen,但它不起作用

string color_id = "sdsdssd";
Match variations = Regex.Match (data, @""+color_id+"_[^\""]*\""\W\,\""sizes\""\:\s*\W.*?businessCatalogItemId"":\"")", RegexOptions.IgnoreCase);@""+color_id+"_[^\""]*\""\W\,\""sizes\""\:\s*\W.*?businessCatalogItemId"":\"")";

但以上方法不起作用

如何在 c# 中将起始元素处的变量连接到正则表达式

【问题讨论】:

  • 很难准确地说出你在问什么。你想要的结果是什么?
  • 我希望将这个“sdsdssd”插入到 color_id 的位置
  • “不工作”是什么意思?你的电脑起火了吗?它没有编译吗?是否有任何特定的症状,或者你是否突然被一种可怕的悲伤和徒劳的感觉所克服,好像生活是一连串难以理解的求救声?
  • 请不要转发one and the same question。请参阅下面的答案。我已经针对假的"sdsdssd_dddd\" ,\"sizes\": dbusinessCatalogItemId\":\"" 字符串测试了my code。请提供您的和预期的输出。
  • 看起来努力已经放弃了。

标签: c# regex concat


【解决方案1】:

您的代码无法正常工作,因为您似乎已将它两次放入您的代码中。

@""+color_id+"_[^\""]\""\W\,\""sizes\"":\s\W.*?businessCatalogItemId"":\ "")"

删除应该允许串联工作。

或者,您可以使用 String.Format 来制作图案

string pattern = String.Format("@{0}_[^\""]*\""\W\,\""sizes\""\:\s*\W.*?businessCatalogItemId"":\"")", color_id)
Match variations = Regex.Match (data, pattern, RegexOptions.IgnoreCase);

在 String.Format 中,它会将 {0} 替换为 color_id。您可以使用它在字符串中插入多个变量。 Take a look at this MSDN page for more info

【讨论】:

    【解决方案2】:

    @ 标识符仅影响紧随其后的文字字符串 - 您需要将其应用于每个需要它的字符串:

    Match variations = Regex.Match (data,color_id +                     
                                         @"_[^\""]*\""\W\,\""sizes\""\:\s*\W.*?businessCatalogItemId"":\"")", 
                                    RegexOptions.IgnoreCase);
    

    【讨论】:

    • 错误解析 'sdsdssd_[^\"]*\"\W\,\"sizes\"\:\s*\W.*?businessCatalogItemId":\")' - 太多)的。
    • 但是逐字字符串文字不会让您过度转义模式,请使用Regex.Escape(color_id) + @"_[^""]*""\W,""sizes"":\s*\W.*?businessCatalogItemId"":"""(如果变量从不包含非字母数字符号,Regex.Escape() 可能是多余的)
    • 很难区分您的字符串中的代码和数据,或者您试图转义的引号 - 我试图根据您发布的内容做出假设,但可能弄错了。关键是@ 仅适用于紧随其后的文字字符串,因此@"string1" + b + "string2" 不会将@ 应用于string2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多