我有一个字符串,我想在其中找到Description和之间的所有单词,并替换这些单词,使它们只有255个字符长。如果单词少于255个字符,则不执行任何操作;如果单词多于255个字符则截断单词。我使用了一个正则表达式,只有单词在我定义的范围之外被捕获。
我是以下正则表达式:
(?<=<Name>Description</Name><Value>)(?<Text>.{0,255}).*?(?=</Value>)
代码是C#。
我有一个C#脚本,可以执行以下操作:
string strFile = File.ReadAllText(@"D:FINAL.xml");
string pattern = @"(?<=<Name>Description</Name><Value>)(?<Text>.{0,255}).*?(?=</Value>)";
string result = Regex.Replace(strFile, pattern, "${Text}");
File.WriteAllText(@"D:FINAL.xml", result);
例如:https://regex101.com/r/Etfpol/5
这是个坏主意,但你的想法,你的电脑。。。(一般来说,你不应该使用Regex来"解析"xml或html,糟糕的事情可能会发生,也许不是今天,而是明天或后天(
string pattern = @"(?<=<Name>Description</Name><Value>)([^<]*)(?=</Value>)";
const int maxLength = 255
string result = Regex.Replace(strFile, pattern, x => x.Value.Length > maxLength ? x.Value.Remove(maxLength) : x.Value);
您需要一个MatchEvaluator
,一个接收匹配并计算替换的方法。
嗯。。。你甚至可以不用MatchEvaluator
。。。
string pattern = @"(?<=<Name>Description</Name><Value>)([^<]{0,255})([^<]*)(?=</Value>)";
string result = Regex.Replace(strFile, pattern, "$1");