动态评估Regex匹配



我陷入了一个无法完全理解的困境。我正在评估许多单词之间包含大量空格的大型文本字符串。我已经找到了正确显示的文本,我需要用不间断的空格字符替换每个片段中大约一半的空格。如果空间的数量是偶数或奇数,则会发生变化。我的替代品可以归结为:

if (numberOfSpaces > 3) {
double mathresult = (numberOfSpaces / 2);
int numberNBSP = Math.Ceiling(mathresult);
int numberSpace = Math.Floor(mathresult);
string replaceText;
for(numberNBSP > 0, numberNBSP--)
replaceText+=" ";
for(numberSpace > 0, numberSpace--)
replaceText+=" ";

我现在的问题是为每个空间段实例调用此代码。每个环节都需要单独评估,我觉得我在RegEx中对如何做到这一点有一个盲点。我希望这是有意义的,谢谢你花时间阅读这篇文章!

只需要向Replace传递一个回调,该回调将在每次匹配时执行。

例如:

using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "I  hope    this makes   sense,   thank you   for    taking  the     time to   read   this!";
Console.WriteLine("input:  " + input);
Regex rx = new Regex(@" +");
string output = rx.Replace(input, Evaluator);
Console.WriteLine("output: " + output);
}
static string Evaluator(Match match)
{
string replaceText;
int numberOfSpaces = match.Value.Length;          
if (numberOfSpaces > 3) {   
double mathresult = (numberOfSpaces / 2);
int numberNBSP = (int) Math.Ceiling(mathresult);
int numberSpace = (int) Math.Floor(mathresult);
replaceText = "";
for (; numberNBSP > 0; numberNBSP--) replaceText += " ";
for (; numberSpace > 0; numberSpace--) replaceText += " ";
} else {
replaceText = match.Value;
}     
return replaceText;       
}
}

显然,替换空格的逻辑是你自己的,我没有对此进行研究。

或者,您可以使用匹配4个或更多空格字符的正则表达式字符串" {4,}",然后可以取消if (numberOfSpaces > 3)测试等

如果您希望能够匹配所有空白,例如制表符和换行符,那么请使用s而不是单个空格字符。

最新更新