当前位置:  开发笔记 > 编程语言 > 正文

.NET - 如何将"大写"分隔的字符串拆分为数组?

如何解决《.NET-如何将"大写"分隔的字符串拆分为数组?》经验,为你挑选了6个好方法。

我如何从这个字符串:"ThisIsMyCapsDelimitedString"

...到这个字符串:"这是我的帽子划分字符串"

VB.net中最少的代码行是首选,但C#也是受欢迎的.

干杯!



1> Markus Jarde..:

我刚才做了这个.它匹配CamelCase名称的每个组件.

/([A-Z]+(?=$|[A-Z][a-z])|[A-Z]?[a-z]+)/g

例如:

"SimpleHTTPServer" => ["Simple", "HTTP", "Server"]
"camelCase" => ["camel", "Case"]

要将其转换为仅在单词之间插入空格:

Regex.Replace(s, "([a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))", "$1 ")

如果你需要处理数字:

/([A-Z]+(?=$|[A-Z][a-z]|[0-9])|[A-Z]?[a-z]+|[0-9]+)/g

Regex.Replace(s,"([a-z](?=[A-Z]|[0-9])|[A-Z](?=[A-Z][a-z]|[0-9])|[0-9](?=[^0-9]))","$1 ")


实际上camelCase有一个领先的小写字母.你在这里指的是PascalCase.
......当你提到可能是"骆驼案"或"帕斯卡案"的东西时,它被称为"跨越"

2> Wayne..:
Regex.Replace("ThisIsMyCapsDelimitedString", "(\\B[A-Z])", " $1")


这个将连续的大写视为单独的单词(例如ANZAC是5个单词),其中MizardX的答案将它(正确的恕我直言)视为一个单词.
@Ray,我认为"ANZAC"应该被写为"Anzac",因为它不是英语案例,因此被认为是一个pascal案例.

3> JoshL..:

很棒的答案,MizardX!我略微调整它以将数字视为单独的单词,因此"AddressLine1"将变为"地址行1"而不是"地址行1":

Regex.Replace(s, "([a-z](?=[A-Z0-9])|[A-Z](?=[A-Z][a-z]))", "$1 ")


太棒了!我怀疑不会有一些人会对接受的答案处理字符串中的数字感到惊讶.:)

4> Troy Howard..:

只是为了一点点......这是一个不使用正则表达式的扩展方法.

public static class CamelSpaceExtensions
{
    public static string SpaceCamelCase(this String input)
    {
        return new string(Enumerable.Concat(
            input.Take(1), // No space before initial cap
            InsertSpacesBeforeCaps(input.Skip(1))
        ).ToArray());
    }

    private static IEnumerable InsertSpacesBeforeCaps(IEnumerable input)
    {
        foreach (char c in input)
        {
            if (char.IsUpper(c)) 
            { 
                yield return ' '; 
            }

            yield return c;
        }
    }
}



5> Pseudo Masoc..:

格兰特瓦格纳的优秀评论不谈:

Dim s As String = RegularExpressions.Regex.Replace("ThisIsMyCapsDelimitedString", "([A-Z])", " $1")



6> Dan Malcolm..:

我需要一个支持首字母缩略词和数字的解决方案.这个基于正则表达式的解决方案将以下模式视为单个"单词":

大写字母后跟小写字母

一系列连续数字

连续大写字母(解释为首字母缩略词) - 一个新词可以开始使用最后一个大写,例如HTMLGuide =>"HTML Guide","Theateam"=>"A Team"

可以做一个单行:

Regex.Replace(value, @"(?

更可读的方法可能更好:

using System.Text.RegularExpressions;

namespace Demo
{
    public class IntercappedStringHelper
    {
        private static readonly Regex SeparatorRegex;

        static IntercappedStringHelper()
        {
            const string pattern = @"
                (?

这是(XUnit)测试的摘录:

[Theory]
[InlineData("PurchaseOrders", "Purchase-Orders")]
[InlineData("purchaseOrders", "purchase-Orders")]
[InlineData("2Unlimited", "2-Unlimited")]
[InlineData("The2Unlimited", "The-2-Unlimited")]
[InlineData("Unlimited2", "Unlimited-2")]
[InlineData("222Unlimited", "222-Unlimited")]
[InlineData("The222Unlimited", "The-222-Unlimited")]
[InlineData("Unlimited222", "Unlimited-222")]
[InlineData("ATeam", "A-Team")]
[InlineData("TheATeam", "The-A-Team")]
[InlineData("TeamA", "Team-A")]
[InlineData("HTMLGuide", "HTML-Guide")]
[InlineData("TheHTMLGuide", "The-HTML-Guide")]
[InlineData("TheGuideToHTML", "The-Guide-To-HTML")]
[InlineData("HTMLGuide5", "HTML-Guide-5")]
[InlineData("TheHTML5Guide", "The-HTML-5-Guide")]
[InlineData("TheGuideToHTML5", "The-Guide-To-HTML-5")]
[InlineData("TheUKAllStars", "The-UK-All-Stars")]
[InlineData("AllStarsUK", "All-Stars-UK")]
[InlineData("UKAllStars", "UK-All-Stars")]

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有