所以我一直在尝试提供一个正则表达式来分隔这些类型的字符串:A100
、A-100
、A1-100
、A1_100
、A1A100
、“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
),那么它需要有其他东西但是一个数字,否则我只会得到A1
和A100
。但这非常非常困惑,我宁愿做一些简单的事情,例如([^\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/