正则表达式匹配文件路径字符串的数字末尾

时间:2016-01-04 17:55:48

标签: c# regex

我有以下文件名,并希望在"_R"之后提取数字:

  • \ FileName_R 10 .txt => 10
  • \ FileName_R_ 10 .txt => 10

我已经成功使用了正则表达式:

_R_?(\d+)\.txt$

现在,我正在考虑使用以下变体进行调整:

  • \ FileName_R 10 _1.txt => 10
  • \ FileName_R_ 10 _1.txt => 10
  • \ FileName_R 10 _11.txt => 10

我试过

_R_?(\d+)_?\d+?\.txt$

这似乎适用于后面的例子,但与第一个例子有关。

感谢。

2 个答案:

答案 0 :(得分:5)

_R_?(\d+)(_\d+)?.txt$

您遇到的问题是\d+?使重复变得懒惰而不是使其成为可选项。换句话说,它仍然试图匹配至少一个数字,只是它试图匹配最少数量(而不是最大数量)的数字,以便匹配。

<小时/> 编辑:要在不引入捕获组的情况下使用分组,您可以使用(?:)

_R_?(\d+)(?:_\d+)?.txt$

编辑:缺少下划线

答案 1 :(得分:0)

由于\ d不仅限于0-9位数:https://stackoverflow.com/a/6479605/5015529,我使用:_R_?([0-9]+)(?:_[0-9]+)?\.txt$