7

我有一个需要使人类可读的单词列表,例如 FirstName 到 First Name,LastName 到 Last Name,在某些情况下,ARB 之类的首字母缩略词保持原样。后者是最近引入的,并且由于我们的正则表达式返回AR Bs导致了显示问题。以下是我们所拥有的,我知道这对于首字母缩略词来说是不够的:

([A-Z][a-z]+)

我在 SO 和其他能够使用首字母缩略词的网站上找到了其他表达式,但是它们适用于首字母缩略词在字符串中而不是整个字符串的字符串。我可以做简单的正则表达式,但这对我的技能来说太棘手了。如果我有它们,我会提供其他示例进行测试,但是除了新的 ARB 之外,所有字符串都可以正常工作。谢谢你。

更新:这是代码用法

string friendlyName = Regex.Replace(field.Name, "([A-Z][a-z]+)", " $1", RegexOptions.Compiled).Trim();
4

3 回答 3

12

不会[A-Z]+[a-z]*做吗?这应该匹配一个或多个大写字母,后跟零个或多个小写字母。所以ARBs将保持一个单一的实体,但CamelCase将被拆分为Camel Case.

于 2011-12-13T21:44:42.070 回答
0

这个怎么样?

[A-Z][a-z]+|[A-Z]
于 2011-12-13T21:46:33.837 回答
0

包含首字母缩略词的字符串/段落/句子可以转换为人类可读的句子/字符串。我只是在尝试格式化 Pascal Cased 字符串,我进行了更多调查,甚至尝试将 Acronyms 转换为可理解的格式。

测试数据

输入: “QWERTYSomeThing OmitTRYSomeThing MayBeWorkingFYI”

输出: “QWERTY Some Thing Omit TRY Some Thing may be working for FYI”

代码: 将输入字符串传递给下面给出的方法。

    private static string FormatPascalAndAcronym(string input)
    {
        var builder = new StringBuilder(input[0].ToString());
        if (builder.Length > 0)
        {
            for (var index = 1; index < input.Length; index++)
            {
                char prevChar = input[index - 1];
                char nextChar = index + 1 < input.Length ? input[index + 1] : '\0';

                bool isNextLower = Char.IsLower(nextChar);
                bool isNextUpper = Char.IsUpper(nextChar);
                bool isPresentUpper = Char.IsUpper(input[index]);
                bool isPrevLower = Char.IsLower(prevChar);
                bool isPrevUpper = Char.IsUpper(prevChar);

                if(!string.IsNullOrWhiteSpace(prevChar.ToString()) && 
                    ((isPrevUpper&& isPresentUpper && isNextLower) || 
                    (isPrevLower&&isPresentUpper&&isNextLower)||
                    (isPrevLower&&isPresentUpper&&isNextUpper)))
                {
                    builder.Append(' ');
                    builder.Append(input[index]);
                }
                else{
                builder.Append(input[index]);
                }
            }
        }
        return builder.ToString();
    }
于 2014-05-30T19:56:20.483 回答