如何解决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])
— 十进制数字2
或3
,后跟 -
[^_]*
— 除下划线外的零个或多个字符,后跟 -
$
— 文本结束
您需要获得匹配组 #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 demo 或 C# 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 举报,一经查实,本站将立刻删除。