Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用另一个字符串替换任一字符串_C#_Regex - Fatal编程技术网

C# 用另一个字符串替换任一字符串

C# 用另一个字符串替换任一字符串,c#,regex,C#,Regex,我想用Hdp替换Hvos或Hc: var hvos = "Dhhs.Hvos.Automation.UI"; var hc = "Dhhs.Hc.Automation.UI"; var pattern = "H(c|v)*(os)"; var replacement = "Hdp"; var str1 = Regex.Replace(hc, pattern, replacement).Replace("UI

我想用
Hdp
替换
Hvos
Hc

var hvos = "Dhhs.Hvos.Automation.UI";
var hc = "Dhhs.Hc.Automation.UI";
var pattern = "H(c|v)*(os)";
var replacement = "Hdp";
var str1 = Regex.Replace(hc, pattern, replacement).Replace("UI", "Data");
Console.WriteLine(str1);
var str2 = Regex.Replace(hvos, pattern, replacement).Replace("UI", "Data");
Console.WriteLine(str2);
但只有
Hvos
被替换,而
Hc
没有:

Dhhs.Hc.Automation.Data
Dhhs.Hdp.Automation.Data

str1
str2
应该是相同的。

在您尝试的模式中,这部分
(c | v)*
匹配了0+次
c
v
,例如也可以匹配
ccc
cvvc

您可以使用字符类编写模式,该字符类带有可选部分以匹配
os
,并使用单词边界
\b
防止部分匹配

\bH[cv](?:os)?\b

注意模式也将匹配
HCO

正如作者在评论中指出的,这种模式将更精确地匹配:

\bH(?:c|vos)?\b

在您尝试的模式中,此部分
(c | v)*
匹配0+次
c
v
,例如也可以匹配
ccc
cvvc

您可以使用字符类编写模式,该字符类带有可选部分以匹配
os
,并使用单词边界
\b
防止部分匹配

\bH[cv](?:os)?\b

注意模式也将匹配
HCO

正如作者在评论中指出的,这种模式将更精确地匹配:

\bH(?:c|vos)?\b

创建一个执行此操作的方法,并为两个值调用它


字符串s=str.Replace(“Hvos”,“Hdp”)。Replace(“Hc”,“Hdp”)

创建一个执行此操作的方法,并为两个值调用它


字符串s=str.Replace(“Hvos”,“Hdp”)。Replace(“Hc”,“Hdp”)

因为(os)不是可选的,但我认为最好是完整的“H((vos)| c)”。(不确定这是否完全正确。)为什么要用正则表达式来表示这么简单的事情。您可以使用String.Replace。如果您想让str1与str2相等,那么只需使用str2=str1;因为在“.Hc.”中没有操作系统,您正在寻找可选字符
。例如,
ab?c
将匹配abc或ac,或者围绕(hvos | hc)h(vos | c)@jdweng写入您的或其他方式,因为它们不会同时被调用<代码>str1和
str2
不会出现在同一位置。这只是为了模拟replacement.string.Replace不起作用?因为(os)不是可选的,但我认为最好执行完整的“H((vos)| c)”。(不确定这是否完全正确。)为什么要用正则表达式来表示这么简单的事情。您可以使用String.Replace。如果您想让str1与str2相等,那么只需使用str2=str1;因为在“.Hc.”中没有操作系统,您正在寻找可选字符
。例如,
ab?c
将匹配abc或ac,或者围绕(hvos | hc)h(vos | c)@jdweng写入您的或其他方式,因为它们不会同时被调用<代码>str1和
str2
不会出现在同一位置。这只是为了模拟替换。string.Replace不起作用吗?我想他是在做别的事情。我想他是在做别的事情。请你解释一下。我现在明白了
*
需要在
(os)
之后,而不是在它之前。请注意,如果您只是
(os)*
,它也可能匹配
ososos
,非常确定在这种情况下字符串将保持不变,但很好。感谢您的解释。我现在明白了
*
需要在
(os)
之后,而不是在它之前。请注意,如果您只是
(os)*
,它也可能匹配
ososos
,非常确定字符串在这种情况下会保持不变,但这一点很好。