使用regex,我试图在最后一个下划线之后只得到最后一个数字(只可以是2或3)。
我现在得到的是数字和字符。我需要切断字符,只有数字2-3。
下面是我的例子--在最后一个下划线之后,我只需要得到2个。当前同时获取数字和字符
ABC_0000_DEFG_1I_23_45_HIJKL2.pdfThe output I want -- 2 (after HIJKL).
^.*_\K[^.]+
If I get rid of ^ with \d, d{2-3}, ... it still gets HIJKL.发布于 2021-06-24 00:03:45
正则表达式
_[^_]*([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“。
发布于 2021-06-24 00:00:43
您可以使用
_[^_]*(\d)[^_]*$它与最后一个下划线相匹配,后面跟着一个数字,后面被除下划线以外的任何东西包围。
如果您想忽略[23]或3以外的任何东西,可以使用2而不是3。
发布于 2021-06-24 07:45:08
若要仅在.NET中获得匹配,还可以使用查找器:
(?<=_[^_]*)[23](?=[^_]*$)模式匹配:
(?<=_[^_]*)正向后看,断言_后跟着_以外的可选字符[23]匹配2或3(?=[^_]*$)正前瞻,直到字符串结束时才断言_见.NET regex演示或C#演示。
示例代码
Regex regex = new Regex(@"(?<=_[^_]*)[23](?=[^_]*$)");
Match match = regex.Match("ABC_0000_DEFG_1I_23_45_HIJKL2.pdf");
if (match.Success)
{
Console.WriteLine(match.Value);
}输出
2https://stackoverflow.com/questions/68108140
复制相似问题