【问题标题】:How to handle Regex with multiple patterns?如何处理具有多种模式的正则表达式?
【发布时间】:2014-08-27 09:12:48
【问题描述】:

我有一个需求,我需要从 access db 读取查询并修改查询以将查询中的所有关键字替换为 SQL 可执行查询。 例如:假设有一个查询“从 table1 中选择键”

这里的“key”是保留关键字。必须修改为“Select [key] from table1”(在sql中可以使用)。

查询可能有多个关键字..所以我有一个如下的正则表达式。

string pattern = "Key|IN|ON|VIEW]";
Regex rgx = new Regex(pattern);

我有下面的代码..它检查模式..

string pattern = "Key|IN|ON|VIEW]";
Regex rgx = new Regex(pattern);  
string strModifiedQuery = string.Empty;
strModifiedQuery = strQueryText;
foreach (Match m in rgx.Matches(pattern))
{
    Console.WriteLine(m.Value);
    if (m.Value == "Key")
    {
        strModifiedQuery = rgx.Replace(strModifiedQuery, "[Key]");
    }

    if (m.Value == "IN")
    {
        strModifiedQuery = rgx.Replace(strModifiedQuery, "[IN]");
    }

    if (m.Value == "ON")
    {
        strModifiedQuery = rgx.Replace(strModifiedQuery, "[IN]");
    }

在 c# 中是否有更好的方法将匹配的模式替换为适当的值?

【问题讨论】:

  • Key|IN|ON|VIEW] 错误模式...

标签: c# regex


【解决方案1】:
var pattern = @"(?i)Key|IN|ON|VIEW";
var subject = "Select key from table1";
var result = Regex.Replace(subject, pattern, @"[$0]");

生产

Select [key] from table1

(?i) 开启忽略大小写并替换模式 [$0] 替换括号中的匹配项。

【讨论】:

  • Sriram..完美。这正是我想要的。非常感谢:)
  • 如果查询包含“[Key]”..如何从匹配中忽略它..因为如果查询已经有[Key],替换后它变成[[Key]]。
  • 这确实是另一个问题,请提出新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多