我有一個正則運算式來用值 @p 替換字串中的數字,但我想用相同的 @p1 替換相同的數字,然后是 @p2 和 @p3 等等。
這是示例字串
23 44 56 83 23 83 103 6573 56
我目前的簡單替換將回傳這個
@p @p @p @p @p @p @p @p @p
我想要的是這個
@p1 @p2 @p3 @p4 @p1 @p4 @p5 @p6 @p3
所以相同的數字會回傳相同的 @p number 。
我的正則運算式匹配字串是這個@"\b[0123456789] \b"
所以目前我這樣做
public static System.Text.RegularExpressions.Regex Reg_pass_numbers = new
System.Text.RegularExpressions.Regex(@"\b[0123456789] \b");
StringHolder = Reg_pass_Hex.Replace(StringHolder, "@p");
StringHolder 保存我的輸入字串。
正則運算式可以幫助解決這個問題嗎?
uj5u.com熱心網友回復:
同意拉瑪。MatchEvaluator 是一段代碼,用于指定在 Regex 替換期間應使用什么值進行替換
var r = new Regex(@"\d ");
var i = "23 32 23";
var d = new Dictionary<string, int>();
var x = 1;
var o = r.Replace(
i,
new MatchEvaluator(m => d.TryGetValue(m.Value, out var v)? $"@p{v}" : $"p{d[m.Value]=x }")
);
有一點要解開這個所以..
- 您的正則運算式可以簡化為“一位或多位數字”。
- 我們有一個變數 x 每次我們找到一個我們以前從未見過的新匹配時我們都會增加它
- 我們有一個字典來跟蹤我們看到的匹配項
- 匹配評估器代碼獲取匹配的值,例如 m.Value 中的“23”
- 我們嘗試將字典值放入 v;如果成功,我們使用 v。如果不成功,我們為 m.Value 添加一個新的字典條目,其中包含 x 的當前值,然后增加 x
如果您想從中制作一些 sql 引數并想知道哪些值與哪些引數對應,請列舉整個字典:鍵值對的 Value 是 p 數,Key 是值字串
uj5u.com熱心網友回復:
您可以使用Regex.Replace,但在替換時,您可以match借助字典檢查是否較早出現:
// try adding a new match
dict.TryAdd(m.Value, dict.Count 1)
? dict.Count // succeed, just return its number
: dict[m.Value] // failed to add, the match already exists, take its number
代碼:
string source = "23 44 56 83 23 83 103 6573 56";
Dictionary<string, int> dict = new Dictionary<string, int>();
string result = Regex.Replace(
source,
"[0-9] ",
m => $"@p{(dict.TryAdd(m.Value, dict.Count 1) ? dict.Count : dict[m.Value])}");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372362.html
上一篇:C 文字char*或字串變數錯誤“不能是文字資料成員”
下一篇:如何泛型傳遞類作為引數
