解析正则表达式查询

时间:2019-06-11 14:47:49

标签: c# regex

我有一个要转换为英语的法语公式 见下文:

Initial: =SI(renamed="SI";SI(f1<f4;"SI(";"nok");"1;2")
Must be converted to: =IF(renamed="SI",IF(f1<f4,"SI(";"nok"),"1;2")

2个问题:

  • ;必须转换为,(但不能在字符串“ xxx; xxx”

  • SI必须重命名为IF(但不能在字符串“ xxx SI xxx”之内

我将此正则表达式作为一个好的开始:([^=;]*)\( https://regex101.com/r/OPyLh1/3

实际上,这只是IF / SI工作的示例,但是我大约有一百个单词可以在法语和英语之间转换

实现此目标的最佳方法是什么(正则表达式+代码的混合?) 我们正在用C#进行开发

1 个答案:

答案 0 :(得分:1)

针对此问题的表达式的设计相当复杂,可能取决于我们可能提供的输入信息以及对技术的理解,而我对最后一个技术并不确定。然后,我们可以定义一组规则以查找我们希望替换的规则。例如,此表达式将使用逻辑OR捕获问题中包含的;SI

(SI)|["](;)[A-Z]|[0-9](;)["]|[)](;)["]

Demo

测试

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(SI)|[""](;)[A-Z]|[0-9](;)[""]|[)](;)[""]";
        string input = @"=SI(renamed=""SI"";SI(f1<f4;""SI("";""nok"");""1;2"")";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}

RegEx

如果不需要此表达式或您希望对其进行修改,请访问regex101.com

RegEx电路

jex.im可视化正则表达式:

enter image description here