c# - 正则表达式匹配文件路径字符串的数字结尾

标签 c# regex

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

  • \FileName_R10.txt => 10
  • \FileName_R_10.txt => 10

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

_R_?(\d+)\.txt$

现在,我希望对其进行调整以适应以下变体:

  • \FileName_R10_1.txt => 10
  • \FileName_R_10_1.txt => 10
  • \FileName_R10_11.txt => 10

我试过了

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

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

谢谢。

最佳答案

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

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


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

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

编辑:缺少下划线

关于c# - 正则表达式匹配文件路径字符串的数字结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34596963/

相关文章:

javascript - 如何使用 javascript 正则表达式替换为单词的子字符串

java - 对字符串执行替换但忽略某些模式

c# - 'Event' 的无效值 - 属性 (XAML Eventsetter)

C# 比较集合

c# - 在 youtube api .net 中按 ID 获取 youtube 播放列表

python - 正则表达式:替换除数字、特定字符和特定单词之外的所有内容

javascript - 如何验证长度并匹配所需的字符?

正则表达式仅当两个部分都存在时才允许分隔符

c# - 是否可以根据类型实现泛型方法的注册?

c# - 匿名事件