微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C# 正则表达式匹配最后一个下划线后的最后一位数字

如何解决C# 正则表达式匹配最后一个下划线后的最后一位数字

使用正则表达式,我试图只获取最后一个下划线之后的最后一位数字(只能是 2 或 3)。

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

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

ABC_0000_DEFG_1I_23_45_HIJKL2.pdf
The output I want -- 2 (after HIJKL).

^.*_\K[^.]+

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

解决方法

你可以使用

_[^_]*(\d)[^_]*$

它匹配最后一个下划线,后跟一个数字,周围没有下划线。

如果您想忽略除 [23]\d 以外的任何内容,您可以使用 2 代替 3

,

正则表达式

_[^_]*([2-3])[^_]*$

你应该这样做。它匹配:

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

您需要获得匹配组 #1:

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”。

,

要仅在 .NET 中进行匹配,您还可以使用环视:

(?<=_[^_]*)[23](?=[^_]*$)

模式匹配:

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

查看 .NET regex demoC# demo

示例代码

Regex regex = new Regex(@"(?<=_[^_]*)[23](?=[^_]*$)");
Match match = regex.Match("ABC_0000_DEFG_1I_23_45_HIJKL2.pdf");
if (match.Success)
{
    Console.WriteLine(match.Value);
}

输出

2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?