首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.net 6值转换器中的正则表达式问题

.net 6值转换器中的正则表达式问题
EN

Stack Overflow用户
提问于 2022-03-15 10:47:59
回答 1查看 147关注 0票数 0

我正在努力学习一些.net6和c#,并且经常与正则表达式作斗争。如果这是相关的话,请在Windows中更具体地使用Avalonia。我正在尝试用两个文本框做一个小应用程序。我在其中一个上写文本,并使用值转换器在另一个文本中获得“筛选”文本。我想过滤数学表达式,试图在以后解决它们。一些简单的,一种写课文数学和实时获得结果的方法。几个星期以来,我一直试图自己去理解这个正则表达式,但没有取得任何成功。我想在字符串"_Expression{BLABLA}“中替换"BLABLA”。为了测试我的表达式,我一直在检查http://regexstorm.net/https://regex101.com/,根据它们,我的匹配应该是正确的(除非我误解了结果)。但是我的小应用程序的结果对我来说是非常奇怪的,,我最终决定寻求帮助。这是我的代码:

代码语言:javascript
复制
        private static string? FilterStr(object value)
        {
            if (value is string str)
            {
                string pattern = @"\b_Expression{(.+?)\w*}";
                Regex rgx = new(pattern);
                foreach (Match match in rgx.Matches(str))
                {
                    string aux = "";
                    aux = match.Value;
                    aux = Regex.Replace(aux, @"_Expression{", "");
                    aux = Regex.Replace(aux, @"[\}]", "");
                    str = Regex.Replace(str, match.Value, aux);
                }
                return new string(str);
            }
            return null;
        }

然后,一些示例输入的结果是:输入:

代码语言:javascript
复制
Some text
_Expression{x}
_Expression{1}
_Expression{4}
_Expression{4.5} _Expression{4+4}
_Expression{4-4} _Expression{4*x}
_Expression{x/x}
_Expression{x^4}
_Expression{sin(x)}

输出:

代码语言:javascript
复制
Some text
x
1{1}
1{4}
1{4.5} 1{4+4}
1{4-4} 1{4*x}
1{x/x}
1{x^4}
1{sin(x)}

或投入:

代码语言:javascript
复制
Some text
_Expression{x}

_Expression{4}
_Expression{4.5} _Expression{4+4}
_Expression{4-4} _Expression{4*x}
_Expression{x/x}
_Expression{x^4}
_Expression{sin(x)}

输出:

代码语言:javascript
复制
Some text
x

_Expression{4}
4.5 _Expression{4+4}
4-4 _Expression{4*x}
x/x
_Expression{x^4}
_Expression{sin(x)}

这种行为让我感到很困惑。我不明白为什么"(.+?)“对他们中的一些人不起作用,对其他人也不起作用.或者我没有正确定义什么,或者我的替代品是错的?我看不见..。

非常感谢你的时间!)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-15 23:09:50

正则表达式中有一些缺少的部分,例如,它没有大括号{}转义,因为大括号在正则表达式中有特殊的含义;它们用作量词

用下面的那个。

为了在大括号之间提取数学表达式,它使用一个名为命名捕获组mathExpression

代码语言:javascript
复制
 _Expression\{(?<mathExpression>.+?)\}
  • _Expression\{:从固定文本_Expression{开始
  • (?<mathExpression>:启动一个名为mathExpression的命名捕获组
  • .+?:以一种非贪婪的方式对待下一个角色
  • ):结束命名捕获组
  • \}:以固定字符}结尾

下面的示例将输出2个匹配

代码语言:javascript
复制
Regex regex = new(@"_Expression\{(?<mathExpression>.+?)\}");
var matches = regex.Matches(@"_Expression{4.5} _Expression{4+4}");
foreach (Match match in matches.Where(o => o.Success))
{
    var mathExpression = match.Groups["mathExpression"];
    Console.WriteLine(mathExpression);
}

输出

代码语言:javascript
复制
4.5
4+4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71480922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档