首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Regex匹配最后一个下划线之后的最后一个数字。

C# Regex匹配最后一个下划线之后的最后一个数字。
EN

Stack Overflow用户
提问于 2021-06-23 23:53:33
回答 3查看 146关注 0票数 1

使用regex,我试图在最后一个下划线之后只得到最后一个数字(只可以是2或3)。

我现在得到的是数字和字符。我需要切断字符,只有数字2-3。

下面是我的例子--在最后一个下划线之后,我只需要得到2个。当前同时获取数字和字符

代码语言:javascript
复制
ABC_0000_DEFG_1I_23_45_HIJKL2.pdf
代码语言:javascript
复制
The output I want -- 2 (after HIJKL).

^.*_\K[^.]+

If I get rid of ^ with \d, d{2-3}, ... it still gets HIJKL.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-06-24 00:03:45

正则表达式

代码语言:javascript
复制
_[^_]*([2-3])[^_]*$

你应该这么做。它符合:

  • _ -一个下划线,后面跟着
  • [^_]* -除下划线以外的零或多个字符,后面跟着
  • ([23]) -十进制数字23,后面跟着
  • [^_]* -除下划线以外的零或多个字符,后面跟着
  • $ -文本结尾

你需要得到匹配组#1:

代码语言:javascript
复制
var rx = new Regex(@"_[^_]*([2-3])[^_]*$");
var m  = rx.Match("ABC_0000_DEFG_1I_23_45_HIJKL2.pdf");
var s  = m.Success ? m.Groups(1) : null;

此时,s应该是"2“。

票数 0
EN

Stack Overflow用户

发布于 2021-06-24 00:00:43

您可以使用

代码语言:javascript
复制
_[^_]*(\d)[^_]*$

它与最后一个下划线相匹配,后面跟着一个数字,后面被除下划线以外的任何东西包围。

如果您想忽略[23]3以外的任何东西,可以使用2而不是3

票数 0
EN

Stack Overflow用户

发布于 2021-06-24 07:45:08

若要仅在.NET中获得匹配,还可以使用查找器:

代码语言:javascript
复制
(?<=_[^_]*)[23](?=[^_]*$)

模式匹配:

  • (?<=_[^_]*)正向后看,断言_后跟着_以外的可选字符
  • [23]匹配2或3
  • (?=[^_]*$)正前瞻,直到字符串结束时才断言_

.NET regex演示C#演示

示例代码

代码语言:javascript
复制
Regex regex = new Regex(@"(?<=_[^_]*)[23](?=[^_]*$)");
Match match = regex.Match("ABC_0000_DEFG_1I_23_45_HIJKL2.pdf");
if (match.Success)
{
    Console.WriteLine(match.Value);
}

输出

代码语言:javascript
复制
2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68108140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档