基于性别动态替换his/her的正则匹配需求及代码修正
C#实现按规则替换文本中的his/her(区分大小写)
需求说明
替换文本中的###HIS_HER###标记,遵循以下规则:
- 标记处于行首或语句结束符号(如句号)之后时,替换为首字母大写的
His/Her - 标记处于行内中间位置时,替换为小写的
his/her
示例输入:
###HIS_HER### Ability is good. Test ###HIS_HER### Ability is good.###HIS_HER### Test Done.
预期输出:
His Ability is good. Test his Ability is good.His Test Done.
现有问题代码
当前使用的C#代码无法满足需求:
var text = "###HIS_HER### Ability is good. Test ###HIS_HER### Ability is good.###HIS_HER### Test Done."; var replace = "his"; var Replace = new System.Text.RegularExpressions.Regex(@"[A-Z][a-z]\s*"+search); text = Replace.Replace(text,replace); return text;
正确实现方案
通过正则表达式区分两种场景,结合替换委托实现精准替换:
using System.Text.RegularExpressions; var inputText = "###HIS_HER### Ability is good. Test ###HIS_HER### Ability is good.###HIS_HER### Test Done."; var targetWord = "his"; // 可替换为"her"适配女性性别 var targetWordUpper = char.ToUpper(targetWord[0]) + targetWord.Substring(1); // 正则匹配两类目标:行首/句号后的标记,以及普通行内标记 var pattern = new Regex(@"(^|\.)\s*###HIS_HER###|###HIS_HER###"); var resultText = pattern.Replace(inputText, match => { // 匹配到行首或句号后的情况,返回大写形式 if (match.Groups[1].Success) { return match.Groups[1].Value + (match.Groups[1].Value == "" ? "" : " ") + targetWordUpper; } // 普通行内情况,返回小写形式 return targetWord; }); Console.WriteLine(resultText);
代码说明
- 正则表达式
(^|\.)\s*###HIS_HER###捕获行首或句号后的标记,保留前面的句号;\s*处理标记与前面符号间的空格 - 单独的
###HIS_HER###匹配行内中间的标记 - 替换委托通过判断捕获组是否存在,决定返回大写或小写形式,确保格式符合规则
运行代码后,示例输入将输出预期结果:
His Ability is good. Test his Ability is good. His Test Done.
内容的提问来源于stack exchange,提问作者Tanay Patel
相关产品推荐
相关产品推荐

