Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串替换的正则表达式_C#_Asp.net_Regex - Fatal编程技术网

C# 字符串替换的正则表达式

C# 字符串替换的正则表达式,c#,asp.net,regex,C#,Asp.net,Regex,我有如下输入字符串 (“abc xyz”或“def”)和(ghi或jkl)以及(“mno poe”或stu) 我想把它换成 (myfun(“abc xyz”)或myfun(“def”)和(myfun(ghi)或myfun(jkl))和(myfun(“mno poe”)或myfun(stu)) 我想用myfun() 任何人都可以帮助我,我如何使用正则表达式设置它? 谢谢 Meghana以下C#引号中的表达式匹配引号中的字符串和非和或或的单词: @"(""(?:[^\\""]+|\\.)*""|\b

我有如下输入字符串

(“abc xyz”或“def”)和(ghi或jkl)以及(“mno poe”或stu)

我想把它换成

(myfun(“abc xyz”)或myfun(“def”)和(myfun(ghi)或myfun(jkl))和(myfun(“mno poe”)或myfun(stu))

我想用
myfun()

任何人都可以帮助我,我如何使用正则表达式设置它? 谢谢 Meghana

以下C#引号中的表达式匹配引号中的字符串和非
的单词:

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

"myfun($1)"
myfun($1)

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

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

更新以满足OPs的新要求表达式如下所示:

@"(?i)(""(?:[^\\""]+|\\.)*""|\b(?!(?:and|or|not|near)\b)\w+\b)"
添加了
(?i)
,使其不区分大小写,并完成了操作员令牌列表。

替换

    [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);
    }
(".+?"|\b\w+?\b)(?<!(OR|AND)) 
List reservedWords=new List(){“AND”、“OR”、“NEAR”、“NOT”};
var rep=Regex.Replace(
输入字符串,
@“([\”“][\w]+[\”“])|”(\w+)”,
m=>reservedWords.Contains(m.Value)?m.Value:“myfun”(+m.Value+)”
);

您好,谢谢您的回复。。。但是我的逻辑运算符可以是AND,NOT,或者,NEAR。等等。如果在双引号中指定了,那么我希望它们也替换。。。。我们如何在这个常规表达式中指定?是否保留了所有大写字母?在这种情况下,您不需要列出它们。上面的表达式将匹配引用的表达式,无论其内容是什么。为您更新了答案。您好,Qtax。。。运算符和我的字符串在任何情况下都可以是(下限或上限)。然后,您需要在问题中更加具体。我的回答将适用于你最初的问题。无论如何,我们如何知道哪些令牌是运算符?可以使用什么逻辑?如果列出它们是可以接受的,那么它可能是一个简单的解决方案,就像我的第一个表达式一样。嗨,很抱歉我的问题中出现了混乱。对我们必须列出它们。我可以说和,或者,不,不,近,~是运营商。谢谢你的回复。。我一定要试试这个,然后回到u:)::)嗨。。看起来很完美,谢谢回复:)。我要试试这个:)嗨。。这看起来是我需要的。。。我一定要试试这个。谢谢:)我应该指出,此模式与
匹配,并使用反向引用,因此值可以引用其中一个。感谢所有人,回复..所有人都在工作..但我只能用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 + ")" 
          );