拆分字符串值c#

Posted

技术标签:

【中文标题】拆分字符串值c#【英文标题】:Splitting string value c# 【发布时间】:2021-12-21 06:28:41 【问题描述】:

我想知道如何将字符串格式的值分成两部分。在我的 asp 应用程序中,我将字符串值从视图解析到控制器。

然后我想将整个值分成两部分。

例如:大多数时间值触发两个字母可能是 TEXT 值(如 "PO" 、 "SS" 、 "GS" ),其余为数字 (SS235452)。

数字的长度不能声明,因为它是随机生成的。所以想从字符串值的开头拆分它。需要帮助。

我当前的代码是

string approvalnumber = approvalCheck.ApprovalNumber.ToUpper();

谢谢。

【问题讨论】:

请指定您的确切标准 - 您说“大部分时间”,但其他时间呢?您是否试图从字符串中拆分字母和数字,其中“所有字母”将是第一项,而“所有数字”将是第二项?如果是这样,正则表达式是一种方法...... @Charleh 我的意思是输入的格式是TextTextNumNumNumNum 同样明智。前两个字母是文本,其他是数字。但是没有静态长度。前两个字母是文本,其余的是数字 你试过approvalnumber.Substring(2); 【参考方案1】:

正如您已经提到的,第一部分将有 2 个字母,只有第二部分是变化的,您可以使用字符串的子字符串方法,如下所示。

        var textPart = input.Substring(0,2);
        var numPart = input.Substring(2);

第一行从起始索引 0 获取 2 个字符,第二条语句从索引 2 获取所有字符。如果需要,您可以将第二部分转换为数字。

请注意,第二行没有提到 Substring 的第二个参数。这个参数是用于长度的,如果没有提到它会提取到字符串的末尾。

【讨论】:

嗨。代码很简单,谢谢【参考方案2】:

您可以尝试使用正则表达式从字符串中提取 alpha、数字。

这个 javascript 函数只返回输入字符串中的数字。

function getNumbers(input) 
            return input.match(/[0-9]+/g);

【讨论】:

但是在这种特殊情况下(已知恰好有两个字母),子字符串更容易 @amitpatole 感谢您的解决方案。我也试试这个【参考方案3】:

我会使用正则表达式。考虑到您指出 ASP-NET-4 的事实,我假设您不能使用元组、out var 等,所以它会如下所示:

using System.Text.RegularExpressions;
using FluentAssertions;
using Xunit;

namespace Playground

    public class Playground
    
        public struct ProjectCodeMatch
        
            public string Code  get; set; 

            public int? Number  get; set; 
        

        [Theory]
        [InlineData("ABCDEFG123", "ABCDEFG", 123)]
        [InlineData("123456", "", 123456)]
        [InlineData("ABCDEFG", "ABCDEFG", null)]
        [InlineData("ab123", "AB", 123)]
        public void Split_Works(string input, string expectedCode, int? expectedNumber)
        
            ProjectCodeMatch result;
            var didParse = TryParse(input, out result);

            didParse.Should().BeTrue();
            result.Code.Should().Be(expectedCode);
            result.Number.Should().Be(expectedNumber);
        

        private static bool TryParse(string input, out ProjectCodeMatch result)
        
            /*
             * A word on this RegExp:
             * ^ - the match must happen at the beginning of the string (nothing before that)
             * (?<Code>[a-zA-Z]+) - grab any number of letters and name this part the "Code" group
             * (?<Number>\d+) - grab any number of numbers and name this part the Number group
             * 0,1 this group must occur at most 1 time
             * $ - the match must end at the end of the string (nothing after that)
             */
            var regex = new Regex(@"^(?<Code>[a-zA-Z]+)0,1(?<Number>\d+)0,1$");

            var match = regex.Match(input);

            if (!match.Success)
            
                result = default;
                return false;
            

            int number;
            var isNumber = int.TryParse(match.Groups["Number"].Value, out number);

            result = new ProjectCodeMatch
            
                Code = match.Groups["Code"].Value.ToUpper(),
                Number = isNumber ? number : null
            ;
            return true;
        
    

【讨论】:

【参考方案4】:

一个 linq 答案:

string d = "PO1232131";
string.Join("",d.TakeWhile(a => Char.IsLetter(a)))

【讨论】:

以上是关于拆分字符串值c#的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中用另一个字符串拆分一个字符串

如何知道拆分字符串的索引是不是存在 C# .NET

在 C# 中拆分字符串 [关闭]

如何使用正则表达式拆分字符串以返回值列表?

拆分为逗号,而不是一个一个地对数值求和 c#

c#中的字符串拆分返回一个空数组