c# - 替换字符串但仅适用于 c# 中的特定模式

标签 c# string replace

我有 2 个字符串,一个是主字符串,另一个是要替换的模式字符串。只有在主字符串中匹配特定模式时,我才想用模式字符串替换主字符串的某些部分。

例子:

string mainstring = "[def].[ijk] = [abc].[def].[ijk]";
string pattern =    "[lmn].[def].[ijk]";

我想要最后的字符串

[lmn].[def].[ijk] = [abc].[def].[ijk]

即如果字符串中只有 2 个部分,则只替换 3 个部分不替换

我正在使用:

mainstring = mainstring.Replace("[def].[ijk]",pattern);

但它替换为,

[lmn].[def].[ijk] = [abc].[lmn].[def].[ijk]
                          ^-------+-------^
                                  |
                                  +-- don't replace here

但我想要

[lmn].[def].[ijk] = [abc].[def].[ijk]

编辑:替换的附加规则:

你可以触摸左手边或右手边,但图案应该是单独的,前后没有任何东西。

最佳答案

我正在尝试遵循这条规则:

i.e. if only 2 part is there in string than only replace not for 3 parts

(仅当匹配模式不在其他部分之间时,才将其解释为替换,或者:既不在 . 之前也不在之后)

这个正则表达式应该满足上面这个规则:

string mainstring = "[def].[ijk] = [abc].[def].[ijk]";
// will replace only right side
//string mainstring = "[abc].[def].[ijk] = [def].[ijk]"; 

string replacement = "[lmn].[def].[ijk]";

string pattern = @"(?<!\.)\[def\].\[ijk\](?!\.)";

string output = Regex.Replace(mainstring, pattern, replacement);

编辑:

如果您需要将基本模式转换为正则表达式格式,请替换两个括号:

string searchPattern  = "[def].[ijk]";

searchPattern = searchPattern.Replace("[", @"\[").Replace("]", @"\]");

并将结果放在前瞻和后视模式之间:

string pattern = @"(?<!\.)" + searchPattern + @"(?!\.)";

解释:

(?<!\.) :该模式称为负先行。仅当前面的字符不是 . 时才会匹配(点)

(?!\.) :该模式称为负向后看。仅当以下字符不是 . 时才会匹配(点)

替换[ ]\[ \]是必需的,因为正则表达式将括号视为间隔或组,并匹配括号之间的每个字符。喜欢[0-9]将匹配 0 之间的任何数字和 9 .但是如果你使用转义序列 @"\[0-9\]"它将括号作为字符并匹配模式 "[0-9]" .我希望它变得更清晰一些

关于c# - 替换字符串但仅适用于 c# 中的特定模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45452763/

相关文章:

c# - 将单独的 DLL 合并为一个程序集以用于开源分发

c# - Int32 的最短字符串表示

javascript - 从拆分字符串创建选择标签

vb.net - 字符串 3 位小数

php - 使用 PHP 将空格转换为破折号和小写

javascript - 如何在 Android 中为 WebView 中的 Javascript 转义 MathML 字符串

c# - hadoop中的序列文件格式

c# - HttpClient GetAsync 在 Windows 8 的后台任务中失败

c# - 如何在 Visual Studio 2010 中从 xsd 模式创建数据集

python - 将具有多个表达式的 sed 转换为 python