将数字、标点符号和字母分开会使整个案件陷入困境



我正在努力实现的目标:将字符串拆分为数字、标点符号(除了.和,这些应该在数字部分找到(和字母的单独部分。示例:

情况1:C_TANTALB

Result:
Alpha[]: C, TANTALB
Beta[]:
Zeta[]: _

情况2:BGA-100_T0.8

Result:
Alpha[]: BGA, T
Beta[]: 100, 0.8
Zeta[]: -, _

情况3:C0201

Result:
Alpha[]: C
Beta[]: 0201
Zeta[]: 

我找到了这篇文章,但它并不是我的全部工作,因为它在示例1中失败了,甚至没有返回alpha部分。它找不到标点符号。

任何帮助都会得到通知。

如果用IsDigitIsLetter迭代字符串进行测试以使其复杂化,
您可以为此使用Regex:(?<Alfas>[a-zA-Z]+)|(?<Digits>d+)|(?<Others>[^a-zA-Zd])

1/。命名捕获组Alfa(?<Alfas>[a-zA-Z]+)

匹配下面列表中的单个字符[a-zA-Z]+

a-z在a(索引97(和z(索引122(之间的单个字符(区分大小写(
a-z在a(索引65(和z(索引90(之间的一个字符(区分大写(

+量化器--在一次和无限次之间匹配,尽可能多次,根据需要反馈(贪婪(

2/。命名捕获组数字(?<Digits>[d,.]+)

\d+匹配一个数字(等于[0-9](
+量化器--在一次和无限次之间匹配,尽可能多次,根据需要反馈(贪婪(

3/。命名捕获组其他(?<Others>[^a-zA-Zd]+)

匹配下面列表[^a-zA-Z\d]中不存在的单个字符

a-z在a(索引97(和z(索引122(之间的单个字符(区分大小写(
a-z在a(索引65(和z(索引90(之间的一个字符(区分大写(
\d匹配一个数字(等于[0-9](

+量化器--在一次和无限次之间匹配,尽可能多次,根据需要反馈(贪婪(

然后获取一个goup值:

var matches = Regex.Matches(testInput, pattern).Cast<Match>();

var alfas = matches.Where(x => !string.IsNullOrEmpty(x.Groups["Alfas"].Value))
.Select(x=> x.Value)
.ToList();

LiveDemo

可能最简单的方法是使用3个单独的正则表达式;每类字符一个。

  • [A-Za-z]+用于字母序列
  • 编号[d.,]+
  • 标点符号[-_]+(目前不完整,请随意扩展列表(

示例:

using System;
using System.Linq;
using System.Text.RegularExpressions;
class MainClass
{
private static readonly Regex _regexAlpha = new Regex(@"[A-Za-z]+");
private static readonly Regex _regexBeta = new Regex(@"[d.,]+");
private static readonly Regex _regexZeta = new Regex(@"[-_]+");
public static void Main (string[] args)
{
Console.Write("Input: ");
string input = Console.ReadLine();
var resultAlpha = _regexAlpha.Matches(input).Select(m => m.Value);
var resultBeta = _regexBeta.Matches(input).Select(m => m.Value);
var resultZeta = _regexZeta.Matches(input).Select(m => m.Value);
Console.WriteLine($"Alpha: {string.Join(", ", resultAlpha)}");
Console.WriteLine($"Beta: {string.Join(", ", resultBeta)}");
Console.WriteLine($"Zeta: {string.Join(", ", resultZeta)}");
}
}

样本输出:

Input: ABC_3.14m--nop
Alpha: ABC, m, nop
Beta: 3.14
Zeta: _, --

现场演示:https://repl.it/repls/LopsidedUsefulBucket

最新更新