首页 > 解决方案 > 如何使用正则表达式分隔包含任何字符的字符串,然后以独占数字结尾?

问题描述

所以我一直在尝试使用一个正则表达式来分隔这些类型的字符串:A100, A-100, A1-100, A1_100, A1A100,"A-100"和许多其他示例。

字符串完全“结束”只有数字,我说“结束”是因为它们可以在引号中,从技术上讲,它不是字符串的结尾,但它是一个单词边界。

我需要的是得到这两个东西,无论是只有数字和只包含数字的字符串,我需要能够将它们分开,因为我可能需要对唯一的数字部分做一些添加。

我试过的是:

所有这一切都通过一个适用于 C# 和 .NET 的实现来实现。有什么指导吗?

标签: c#.netregex

解决方案


您可以使用以下模式:

\b([A-Za-z]+(?:[A-Za-z0-9]*[A-Za-z_\-])?)(\d+)\b

演示

细节:

  • \b- 单词边界。
  • (- 第 1 组开始。
    • [A-Za-z]+- 匹配一个或多个字母。
    • (?:- 非捕获组的开始。
      • [A-Za-z0-9]*- 匹配零个或多个字母数字字符。
      • [A-Za-z_\-]- 匹配单个字母、下划线或连字符。
    • )?关闭非捕获组并使其成为可选。
  • )- 关闭第 1 组。
  • (\d+)- 匹配一个或多个数字并在第 2 组中捕获它们。
  • \b- 单词边界。

注意:您的问题并不完全清楚接受哪些字符。这假设有字母、数字、下划线和连字符。如果您需要支持更多,请随意在适当的字符类中添加更多字符。


推荐阅读