我正在嘗試學習一些 .net6 和 c#,但我在正則運算式方面遇到了很多困難。如果相關的話,更具體地說是 Windows 中的 Avalonia。我正在嘗試用 2 個文本框做一個小應用程式。我在一個上寫文本,然后使用值轉換器在另一個上“過濾”文本。我想過濾數學運算式以嘗試稍后解決它們。一些簡單的,一種撰寫文本數學并實時獲得結果的方式。我已經嘗試了幾個星期來自己計算這個正則運算式,但沒有任何成功。我想在我的字串“_Expression{BLABLA}”中替換“BLABLA”。為了測驗我的表達,我一直在檢查http://regexstorm.net/和https://regex101.com/根據他們的說法,我的比賽應該是正確的(除非我誤解了結果)。但是我的小應用程式中的結果對我來說非常奇怪,我最終決定尋求幫助。這是我的代碼:
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;
}
然后一些樣本輸入的結果是: 輸入:
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)}
輸出:
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)}
或輸入:
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)}
輸出:
Some text
x
_Expression{4}
4.5 _Expression{4 4}
4-4 _Expression{4*x}
x/x
_Expression{x^4}
_Expression{sin(x)}
這種行為讓我感到非常困惑。我不明白為什么“(。 ?)”不適用于其中一些,而它適用于其他...或者我沒有正確定義某些東西或者我的替換錯誤?我看不出來...
非常感謝您的時間!:)
uj5u.com熱心網友回復:
正則運算式中缺少一些部分,例如它沒有大括號{并}轉義,因為大括號在正則運算式中具有特殊含義;它們被用作量詞。
使用下面的那個。
為了提取花括號之間的數學運算式,它使用了一個命名的捕獲組name mathExpression。
_Expression\{(?<mathExpression>. ?)\}
_Expression\{: 從固定文本開始_Expression{(?<mathExpression>: 使用名稱啟動一個命名的捕獲組mathExpression. ?:以非貪婪的方式獲取下一個字符): 結束命名的捕獲組\}: 以固定字符結尾}
下面的示例將輸出 2 個匹配項
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);
}
輸出
4.5
4 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/444979.html
下一篇:正則運算式,檢查位置的子字串
