将数字部分与字母数字分开

本文关键字:数字 数字部 | 更新日期: 2023-09-27 18:34:43

我有一个字母数字值,其中可能包含空格或分数不足。 我想从中拆分数字并将值增加 1,并且需要将数字部分连接回 Alpha 部分。

例如,字母数字可以是:1- BA 123 或 2。BA_123

我使用了正则表达式,如果字符串不包含任何空格或分数不足,它可以工作。以下是用于拆分和递增 1 的代码:

string StrInputNumber="BA123" 
var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*)(?<Numeric>[0-9]*)"); 
var match = numAlpha.Match(StrInputNumber); 
var alpha = match.Groups["Alpha"].Value; 
int num = int.Parse(match.Groups["Numeric"].Value);

这仅适用于字母和数字,没有任何特殊字符

请指导解决此问题

将数字部分与字母数字分开

您只需要在期望的位置添加这些字符即可。

string[] StrInputNumber = { "BA123", "BA_123", "BA 123", "Foo 1"};
foreach (String item in StrInputNumber) {
    Console.Write(item + "'t==>'t");
    var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*[ _]?)(?<Numeric>[0-9]*)");
    var match = numAlpha.Match(item);
    var alpha = match.Groups["Alpha"].Value;
    int num = int.Parse(match.Groups["Numeric"].Value) + 1;
    Console.WriteLine(alpha + num);
}

这将允许(可选(在字母后放置一个空格或一个_

如果你想更灵活,你可以在字母所在的类中添加字符。

var numAlpha = new Regex("(?<Alpha>[a-zA-Z _]*)(?<Numeric>[0-9]*)");

这将允许字符串中的数字之前的任何位置使用任意数量的空格和下划线(例如" Foo _ bar ___ 123 "将匹配(。

统一码

如果要匹配所有字母,而不仅仅是 ASCII 字母,请尝试 Unicode 代码属性

'p{L}将是任何语言的任何字母

'd 是数字的速记字符类

var numAlpha = new Regex("(?<Alpha>['p{L} _]*)(?<Numeric>'d*)");

延伸阅读

对于一些正则表达式基础知识,您可以看到

  • 我的博客文章 每个程序员都应该知道的关于正则表达式的知识

  • 关于 regular-expressions.info 教程(一个非常好的正则表达式来源(

不确定这是否是你问的,但是 - 如果你有 1 个空格或下划线:

var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*)[ _]{1}(?<Numeric>[0-9]*)");

如果您有很多:

var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*)[ _]*(?<Numeric>[0-9]*)");