基于条件分割字符串

6

我想根据谓词来拆分一个字符串。例如:

"ImageSizeTest" 应该变成 "Image Size Test"

注:谓词是 大写字符

当然,我可以编写一个简单的循环,遍历字符串,检查大写字符(谓词)并构建新字符串。但是,我希望这种拆分更加通用,以任何谓词为基础进行拆分。这依然不难实现,但我想知道是否有一种优雅的方法可以使用 Linq 来完成。

参考:

  1. Splitting a String with two criteria

1
它应该得到很多赞。我已经点了我的赞 :-) - LCJ
对于需要一个真正可预测的字符串分割扩展的人:https://dev59.com/t3VC5IYBdhLWcg3wbgdS#298990 - v.oddou
2个回答

3
我理解您不想将其拆分为数组,而是要向字符串引入空格?如果是这样,您可以使用正则表达式将每个大写字符替换为[space]字符。但您需要修剪前导空格。
抱歉,回答完整问题,您可以通过传递要匹配的正则表达式和用于替换匹配项的字符串来使其更通用。
查看http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchevaluator.aspx,您不能考虑MatchEvaluator作为谓词吗?

1
我想我应该更清楚地解释一下:我希望能够使用任何谓词函数:'bool MyPredicate(char c)'。 - Maurits Rijk
2
添加了关于MatchEvaluator的部分。这是否满足您对谓词的需求? - Paul Manzotti
MatchEvaluator 看起来更像我想要执行的操作(例如插入一个空格)。尽管如此,还是点赞,因为这非常有用。 - Maurits Rijk
你可以将正则表达式模式和MatchEvaluator作为参数传递,这样不就提供了一种通用的分割方法吗? - Paul Manzotti
1
谢谢!我决定使用Regex.Replace与MatchEvaluator相结合。虽然不是100%通用的解决方案,但暂时足够好了。 - Maurits Rijk
@MauritsRijk,你能否也发布你的答案? - LCJ

2
        string test ="ImageSizeTest";

        string pattern = "[A-Z]";
        Regex AllCaps = new Regex(pattern);                       

        var fs = test.ToCharArray().Select(x =>
        {
            if (AllCaps.IsMatch(x.ToString()))
                return " " + x.ToString();

            return x.ToString();
        }).ToArray();

        var resss =string.Join("",fs).Trim();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接