繁体   English   中英

字符串替换的正则表达式

[英]Regular Expression for string replace

我有如下输入字符串

("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>)

有谁能帮助我,我该如何使用正则表达式设置它? 谢谢梅加纳

以下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)以使其不区分大小写,并完成了操作员标记的列表。

更换

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

myfun($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);
    }
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 + ")" 
          );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM