c# - 如何使用正则表达式分隔包含任何字符的字符串,然后以独占数字结尾?
问题描述
所以我一直在尝试使用一个正则表达式来分隔这些类型的字符串:A100
, A-100
, A1-100
, A1_100
, A1A100
,"A-100"
和许多其他示例。
字符串完全“结束”只有数字,我说“结束”是因为它们可以在引号中,从技术上讲,它不是字符串的结尾,但它是一个单词边界。
我需要的是得到这两个东西,无论是只有数字和只包含数字的字符串,我需要能够将它们分开,因为我可能需要对唯一的数字部分做一些添加。
我试过的是:
一开始很容易,
A100
很容易用类似的东西分开([a-zA-Z]+)(\d+)
,但后来我需要分开A_100
,我需要一个字符串有 theA_
和另一个 the100
,或者如果是A1-100
,我需要A1-
然后是数字部分100
。随着这个问题的多次迭代,我最终得到了这个凌乱的正则表达式:
([a-zA-Z\+\.\?\!_\-\\\d]+[a-zA-Z\+\.\?\!_\-\\]+)(\d+)
A1A100
它分隔了我需要的很多东西A1
,除了更简单的 A100,因为如果字符串的第一部分有一个数字(比如A100
. 但这非常非常混乱,我宁愿做一些简单的事情([^\n])(\d+)
(这显然不起作用)并获取任何可以包含除换行符以外的任何字符的字符串,然后获取仅以数字结尾的字符串。试图实现前瞻,但我对它们不是很好。
((?=\d+)\d+)
会让我专门获得数字部分,A100
但我无法将它与任何其他字符字符串部分结合起来。
所有这一切都通过一个适用于 C# 和 .NET 的实现来实现。有什么指导吗?
解决方案
您可以使用以下模式:
\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
- 单词边界。
注意:您的问题并不完全清楚接受哪些字符。这假设有字母、数字、下划线和连字符。如果您需要支持更多,请随意在适当的字符类中添加更多字符。
推荐阅读
- node.js - Node.js 应用程序中的多个本地策略不起作用
- stripe-payments - 保留信用卡并使用 Stripe paymentIntent 收费
- microsoft-graph-api - Graph API 中的查询集合
- android - Android Studio:“无法执行重构。无法重命名此元素”
- mysql - 每天显示 N 个最畅销的商品
- javascript - DisTube 不显示歌曲名称和请求的用户
- aws-lambda - “Amazon Kinesis Data Streams”不是完全实时的流?
- python - 使用windows在没有网络连接的linux中安装python包
- android - 在 android 上加载 HTML 内容列表的最佳方式可能是什么?
- html - 如何将反应网站重定向到其他带有图像的网站?