c# - 如何使用正则表达式分隔包含任意字符且仅以数字结尾的字符串?

标签 c# .net regex

所以我一直在尝试提供一个正则表达式来分隔这些类型的字符串:A100A-100A1-100A1_100A1A100“A-100” 以及许多其他示例。

字符串仅以数字“结束”,我说“结束”是因为它们可以用引号引起来,从技术上讲,它不是字符串的结尾,但它是一个单词边界。

我需要的是得到这两件事,无论是在仅数字和仅包含数字的字符串后面,我都需要能够将它们分开,因为我可能需要对唯一的数字部分进行一些添加。

我尝试过的是:

  • 一开始很简单,A100 很容易与 ([a-zA-Z]+)(\d+) 分开,但随后我需要分隔 A_100,并且我需要一个包含 A_ 的字符串,另一个包含 100 的字符串,或者如果它是 A1-100,我需要 A1-,然后是数字部分 100

  • 经过多次迭代这个问题,我最终得到了这个困惑的正则表达式:

    ([a-zA-Z\+\.\?\!_\-\\\d]+[a-zA-Z\+\.\?\!_\-\\]+)(\d+)
    

    它分隔了我需要的很多东西,除了更简单的 A100,因为如果字符串的第一部分中有一个数字(如 A1A100),那么它需要有其他东西但是一个数字,否则我只会得到 A1A100。但这非常非常困惑,我宁愿做一些简单的事情,例如 ([^\n])(\d+) (这显然不起作用)并获取可以包含任何字符的任何字符串但换行符,然后获取仅以数字结尾的字符串。

  • 尝试实现前瞻,但我不太擅长它们。 ((?=\d+)\d+) 只会让我获得 A100 上的数字部分,但我一生都无法设法将其与任何其他字符结合起来字符串部分。

所有这一切都通过与 C# 和 .NET 配合使用的实现实现。有什么指导吗?

最佳答案

您可以使用以下模式:

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

<强> Demo

详细信息:

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

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

关于c# - 如何使用正则表达式分隔包含任意字符且仅以数字结尾的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68025293/

相关文章:

c# - 如何结合自定义序列化程序使用/启用 LINQ? (MONGODB C#)

c# - 打破内部 foreach 循环并继续外部 foreach 循环

.net - 如何从服务器 GAC 中删除 .NET 程序集 DLL

javascript - 我如何在js中分割数组?

c# - 数据集按钮的下一行仅执行一次功能

c# - 使用 C# MEF 将其他属性导入元数据

php - 如何只转义某些字符

mysql - SQL 正则表达式中的特殊字符 - 将单词边界与特殊字符匹配

c# - 为什么速记访问器函数比它们的常规访问器函数更快?

.net - 如何提取正则表达式反向引用的值?