【发布时间】:2019-08-19 08:22:39
【问题描述】:
我想替换之前指定子字符串和之后指定子字符串的字符串中的子字符串。
我有字典:
Dictionary<string, string> map = new Dicrionary<string, string>
{
{"From","DateFrom"}
}
表示源字符串中名称的转换。
那么我有:
var source = "(From|DistanceFrom|Name)";
foreach (var key in map.Keys)
{
var findWholeVarsNamesPattern = $"^({key})$|(\\({key}\\|)|(\\|{key}\\))|(\\|{key}\\|)";
source = Regex.Replace(source, map[key], findWholeVarsNamesPattern);
}
如何修改findWholeVarsNamesPattern 以仅替换源中的"From" 子字符串而不是"(From|" 但不修改"DistanceFrom"?
所以总结一下,我希望替换单词 "From" 具有:
- 或前后均无或
- 在 or 之后有“(”,在 or 之后有“|”
- 有“|”之前和“|”之后或
- 有“|”之前和之后的“)”。
【问题讨论】:
-
也许将关键字包含在单词边界内(即
\\b{key}\\b)? -
请注意,单词边界可能仅在键内部没有空格或其他非单词字符时才有效。另一种方法可能是按长度按降序对键进行排序。
-
您可以使用
$@"^{key}$|(?<=\(){key}(?=\|)|(?<=\|){key}(?=[)|])"修复您当前的方法并使用source = Regex.Replace(source, findWholeVarsNamesPattern, map[key]); -
@H.Wojtowicz 您的来源可以包含非单词字符,例如
"(From-One|DistanceFrom|Name)";?在这种情况下,是否应该更换?空格呢?
标签: c# regex replace .net-core