Regex替换取决于匹配
本文关键字:取决于 替换 Regex | 更新日期: 2023-09-27 18:06:42
我正在研究一些post -tagger分析,我需要替换一些标签。我使用正则表达式来识别标签:
Regex regex = new Regex(@"/(?<firstMatch>[^'s]+)( )");
//之间的任何"/"answers"样品标签:/NN,/VB等…
现在,我将标签名称放入firstMatch组,因此我可以像
那样访问它们foreach (Match m in regex.Matches(allText))
{
Console.WriteLine(m.Groups["firstMatch"].Value);
}
我要做的是将标签名称替换为其他标签,具体取决于它的名称。例如,如果标签名称是DTI,我想将其替换为DT。如果它是NNS,我想用NN代替它。等等,从我拥有的标签列表中。我可以这样做吗?我在想是否有一个匹配替换,这样我就可以使用。
谢谢!
Dictionary<string,string> tags = new Dictionary<string,string>();
public string UpadeInput(String input)
{
tags.Add("DTI", "DT");
tags.Add("NNS", "NN");
tags.Add("LongAnnoyingTag", "ShortTag");
MatchEvaluator evaluator = new MatchEvaluator(ModifyTag);
return Regex.Replace(input,@"(?<=/)(?<firstMatch>[^'s]+)(?= )", evaluator);
}
public string ModifyTag(Match match)
{
return tags[match.Value];
}
编辑为组合标签。
你可以改变ModifyTag
方法来处理不同的情况。
public string ModifyTag(Match match)
{
String tag = match.Value;
if(!tag.Contains("+"))
{
return tags[match.Value];
}
else
{
string[] composedTags = tag.Split('+');
return String.Format("{0}+{1}", tags[composedTags[0]], tags[composedTags[1]]);
}
}
如果我理解你的问题
Regex.Replace(input,"/(?<firstMatch>[^'s]+)[^'s](?= )","$1");
这将用相同的标签名称替换标签名称,除了最后一个字符。