我当前的任务是获取一个字符串并根据一系列规则对其进行转换。我目前遇到以下问题:
当给出"XYYX"
形式的字符串时,我需要将其更改为"XZZX"
形式的字符串。我必须保持X(我可以做到),但我需要更换每个" Y"用" Z"。问题是,我不知道提前有多少" Y" s字符串将包含。每个" X"是一系列角色中的一个,我不得不混淆。
我目前正在用C#写这篇文章。我更倾向于使用正则表达式来进行这种转换,因为我已经被告知最好由负责我的人保留它作为正则表达式。目前,我使用以下内容:
Regex reg = new Regex("([X])Y+([X])");
output = reg.Replace(inputString, "$1Z$2");
如果我正在转换" XYX"到" XZX",但它也将转换" XYYX"到" XZX",它不保留X之间的原始字符数。我还需要确保" XYYXY"转换为" XZZXY"。我意识到这很复杂,因为我试图以一种可能不适合的方式使用正则表达式。
所以,这里有一个问题:是否有办法使用正则表达式来识别位于两个定义明确(但可能不同)的分隔符之间的任意数量的字符,然后仅用相同的字符替换那些字符一个不同的角色?
我见过的大多数其他问题只涉及用一个其他角色替换多个角色,而这并不是我所寻找的。 p>
答案 0 :(得分:2)
如果您需要完全正则表达式方法:
(X|(?!^)\G)Y(?=Y*X)
并替换为$1Z
。请参阅regex demo。
<强>解释强>:
(X|(?!^)\G)
- X
或上一次成功比赛结束Y
- Y
(?=Y*X)
- Y
后必须有零个或多个X
个。另一种方法:匹配和捕获Y
,然后将它们全部替换为Z
s:
var s = "XYYXYX";
var res = Regex.Replace(s, @"X(Y+)X",
m => string.Format("X{0}X",m.Groups[1].Value.Replace("Y", "Z")));
Console.WriteLine(res);
请参阅IDEONE demo