字符串替换的正则表达式

时间:2012-01-27 11:42:32

标签: c# asp.net regex

我输入字符串如下

("abc xyz" OR "def") AND (ghi OR jkl) AND ("mno poe" OR stu)

我希望用

替换它

(myfun("abc xyz") OR myfun("def")) AND (myfun(ghi) OR myfun(jkl)) AND (myfun("mno poe") OR myfun(stu))

我想要用双引号或单个词替换myfun(<string matched>)

的字符串

任何身体都可以帮助我,我怎样才能使用正则表达式设置它? 谢谢 Meghana

4 个答案:

答案 0 :(得分:4)

以下C#引用的表达式匹配引用的字符串和不是ANDOR的字词:

@"(""(?:[^\\""]+|\\.)*""|\b(?!(?:AND|OR)\b)\w+\b)"

将其替换为:

"myfun($1)"

如果所有大写单词都是运算符,则可以改为使用此表达式:

@"(""(?:[^\\""]+|\\.)*""|\b(?![A-Z]+\b)\w+\b)"

更新以满足OP的新要求,表达式如下:

@"(?i)(""(?:[^\\""]+|\\.)*""|\b(?!(?:and|or|not|near)\b)\w+\b)"

添加(?i)以使其不区分大小写并完成运算符令牌列表。

答案 1 :(得分:2)

替换

(".+?"|\b\w+?\b)(?<!(OR|AND)) 

myfun($1)

答案 2 :(得分:1)

    [Test]
    public void Test2()
    {
        string input = "(\"abc xyz\" OR \"def\") AND (ghi OR jkl) AND (\"mno poe\" OR stu)";
        string expected = "(myfun(\"abc xyz\") OR myfun(\"def\")) AND (myfun(ghi) OR myfun(jkl)) AND (myfun(\"mno poe\") OR myfun(stu))";
        string actual = Regex.Replace(input, @"([\""\']).*?(\1)|\b(?!AND|OR)\w+\b", ReplaceWord);
        Assert.AreEqual(expected, actual);
    }

    private static string ReplaceWord(Match m)
    {
        return string.Format("myfun({0})", m.Value);
    }

答案 3 :(得分:1)

List<string> reservedWords = new List<string>() { "AND","OR","NEAR","NOT" };
var rep = Regex.Replace(
            inputString,
            @"([\""][\w ]+[\""])|(\w+)",
            m=> reservedWords.Contains(m.Value) ? m.Value : "myfun(" + m.Value + ")" 
          );