我需要搜索一个字符串,%FirstName%并%PolicyAmount%用数据库中提取的值替换所有出现的字符串.问题是FirstName的大小写有所不同.这使我无法使用该String.Replace()方法.我已经看过关于这个主题的网页了
Regex.Replace(strInput, strToken, strReplaceWith, RegexOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud)
但是出于某些原因,当我尝试更换%PolicyAmount%时$0,更换永远不会发生.我认为它与美元符号是正则表达式中的保留字符有关.
是否有其他方法可以使用,不涉及清理输入以处理正则表达式特殊字符?
使用PowerShell,我想用一个替换[MYID]给定文件中的所有确切事件MyValue.最简单的方法是什么?
我正在寻找替换大(~1mb)字符串的多个(~500)子串的最快方法.无论我尝试过什么,似乎String.Replace是最快的方式.
我只关心最快的方式.不是代码可读性,可维护性等.我不在乎我是否需要使用不安全的代码或预处理原始字符串.
编辑:评论后我添加了一些细节:
每次替换迭代都会将字符串上的ABC替换为其他字符串(每次替换迭代次数不同).要替换的字符串总是相同的 - ABC将始终是ABC.从不ABD.因此,如果有400.000数千个替换迭代.每次使用相同的字符串 - ABC - 将替换为其他(不同的)字符串.
我可以控制ABC是什么.只要它不影响结果,我可以使它超短或超长.显然,ABC不能打招呼,因为大多数输入字符串中都会出现hello.
输入示例: ABCDABCABCDABCABCDABCABCDABCD
示例替换为字符串: BC
示例替换为字符串: AA, BB, CC, DD, EE (5 iterations)
示例输出:
AAADAAAAAADAAAAAADAAAAAADAAAD
ABBDABBABBDABBABBDABBABBDABBD
ACCDACCACCDACCACCDACCACCDACCD
ADDDADDADDDADDADDDADDADDDADDD
AEEDAEEAEEDAEEAEEDAEEAEEDAEED
Run Code Online (Sandbox Code Playgroud)
平均情况:输入字符串为100-200kb,替换迭代次数为40.000次.最坏的情况:输入字符串是1-2mb,400,000次替换迭代.
我可以做任何事.并行做,不安全等等.我不知道怎么做.重要的是它需要尽可能快.
谢谢
string input = "Hello World!";
string pattern = "(World|Universe)";
string replacement = "$1";
string result = Regex.Replace(input, pattern, replacement);
Run Code Online (Sandbox Code Playgroud)
有了下面的例子,结果将是"Hello World!",当$1第一组被替换时(World|Universe),但是我想要的结果是"Hello $1!"
该Regex.Escape方法旨在用于转义正则表达式模式,而不是替换,因为它可以转义其他字符,如斜杠和其他正则表达式模式字符.对我的问题的明显解决方法是让我的替换等于"$$1",并将实现"Hello $1!",但我想知道美元符号是否是我必须逃脱的唯一值(假设replacement用户生成,我不提前知道) ,还是有一个辅助功能,已经这样做了.
有没有人知道一个函数来逃避使用的替换值Regex.Replace(string input, string pattern, string replacement)?
c# ×3
replace ×2
string ×2
.net ×1
.net-2.0 ×1
escaping ×1
performance ×1
powershell ×1
regex ×1