【问题标题】:Can .NET RegEx capitalize letters without .ToUpper()?.NET RegEx 可以在没有 .ToUpper() 的情况下将字母大写吗?
【发布时间】:2015-03-13 19:33:19
【问题描述】:

我正在尝试将ADFS Claims Rule Language 用于一个简单的任务:将一些文本大写。该语言没有有像.ToUpper()这样的通用字符串操作方法,但它有一个使用.NET正则表达式的Regex.Replace宏。

遗憾的是,.NET 正则表达式不支持Perl's \U operator,这可以很好地解决问题(例如s/[a-z]/\U\1/g)。

有没有什么方法可以让一个普通的Regex.Replace(string, string, string) 命令使用.ToUpper() 等将字母大写?

【问题讨论】:

标签: c# .net regex adfs


【解决方案1】:

Substitutions in Regular Expressions。仅支持以下替换元素:$number${name}$$$&$`$'$+$_。你不能变换元素、使用条件或类似的东西。

【讨论】:

    【解决方案2】:

    我不知道在 .NET 中的表达式中执行此操作的简单方法,但您可以在调用 Regex.Replace() 时使用 MatchEvaluator lambda,类似于此处描述的内容:

    How to uppercase the first character of each word using a regex in VB.NET?

    【讨论】:

    • 来自问题:The language does not have common string manipulation methods like .ToUpper()。链接的问题使用.ToUpper()
    • 卡尔,那是因为我说的是正确答案;你不能在 .NET 中的表达式本身中做到这一点。但是,您可以通过匹配评估器 lambda 在函数调用中执行此操作,并且,是的,涉及 .ToUpper(),但它至少是在单个正则表达式函数调用中,而不是多步骤过程。您还可以实现一种解决方法,以不同的方式执行 ToUpper(),但否则 OP 可能不走运。
    • 不,正确的答案是不能在他的约束范围内使用正则表达式来完成。如果他可以为.ToUpper() 编写自己的字符串操作,那么他可能根本不需要正则表达式。
    • 我已经说过我认为在 .Net 的表达式中是不可能的。出于礼貌,我提供了一个可能的替代方案,以防万一。我不知道他使用的 API 是否支持它,但这是一种调查方法,希望他不会完全没有选择。
    【解决方案3】:

    正如 Colin 所说,MatchEvaluator 是您的最佳选择。您可以执行以下操作将语句的第一个字母大写:

    var s = System.Text.RegularExpressions.Regex.Replace
            ("capitalise the first letter of this sentence.", "(.*)", 
            delegate(System.Text.RegularExpressions.Match m) {
                            return (m.Value.Length > 0 ? m.Value.Substring
            (0, 1).ToUpper() : "") + (m.Value.Length > 1 ? m.Value
            .Substring(1, m.Value.Length-1) : "");
                        });
    

    【讨论】:

    • 来自问题:The language does not have common string manipulation methods like .ToUpper()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    相关资源
    最近更新 更多