Regex匹配两个或多个字符,并将每个字符替换为X
本文关键字:字符 替换 Regex 两个 | 更新日期: 2023-09-27 17:50:31
我想将两个或多个字符[fli]
的任意组合更改为x
,单独的f
, l
或i
应保持不变,但任何组合都应替换。
换句话说:匹配模式[fli]{2,}
并将其替换为x
's(与匹配的长度相同)
示例输入1:
office/offices/muffled/stiffly/shuffled/different/difficult/office/officers no change: igloo/visiting/unwieldly
示例输入2:
oflice/oflices/muflled/stiflly/shuflled/diflerent/diflicult/ofiice/oflicers no change: igloo/visiting/unwieldly
样本输出(1 &2):
oxxxce/oxxxces/muxxxed/stxxxxy/shuxxxed/dxxxerent/dxxxxcult/oxxxce/oxxxcers no change: igloo/visiting/unwieldly
我正在使用c#,但我更喜欢把它作为一个普通的正则表达式。
如果您阅读文档,您将发现Regex.Replace()
。特别是,重载Regex.Replace(string,MatchEvaluator)
string source = @"
Now flip, flop and fly,
I don't care if I die,
Now flip, flop and fly,
I don't care if I die.
Don't ever leave me,
Don't ever say goodbye.
" ;
Regex rx = new Regex( @"[fli]{2,}" ) ;
string replacement = rx.Replace(source, m => new string('x',m.Length)) ;
以上屠夫大乔特纳最优秀的歌词和生产的预期
Now xxxp, xxop and xxy,
I don't care xx I die,
Now xxxp, xxop and xxy,
I don't care xx I die.
Don't ever leave me,
Don't ever say goodbye.
通过向前看和向后看找到了解决方案。
string output = Regex.Replace(input, "([fli](?=[fli])|(?<=[fli])[fli])", "x");
它完成了工作。然而,当我对它进行测试时,它在notepad++中不起作用(因为它的搜索框一次只替换一个)。是否有更简单、更优雅或更好的解决方案?