正则表达式在那里找到字符但在没有时忽略

时间:2015-06-18 00:07:53

标签: regex

请帮忙。我正在尝试提出一个常规表达式,它总能找到与粗体文本匹配的内容。问题是某些文件名会有一个" -n"和其他人不会。

  

test_Index_的 060215 _E01.pdf
  test_Index_的 060215-1 _E01.pdf

我试过了:

test_Index_+([0-1]+[0-9]+[0-3]+[0-9]+[0-9]+[0-9]+)_E01.pdf 

但它只能找到 060215

test_Index_+([0-1]+[0-9]+[0-3]+[0-9]+[0-9]+[0-9]+\D+\d+)_E01.pdf

才发现 060215-1

我无法通过一个表达式获得两者的匹配。有人可以帮助使用一个表达式,它总是用我的文件名结构拉出结果吗?

4 个答案:

答案 0 :(得分:3)

您可以使用以下正则表达式:

test_Index_([\d-]+)

或者您可以使用我更喜欢的否定字符类:

test_Index_([^_]+)

答案 1 :(得分:0)

以下正则表达式将使用严格的格式规则:

^test_Index_([01]\d[0-3]\d{3}(?:-\d+)?)_E01\.pdf$

以下是Regex101的示例。

答案 2 :(得分:0)

这将做你想要的:

^test_Index_\d+-{0,1}\d*_E01\.pdf$

App Script Documentation

此外,如果您希望它更精确(因为看起来您匹配日期),您可以这样做:

^test_Index_\d{6}-{0,1}\d*_E01\.pdf$

Example

答案 3 :(得分:0)

您最好的选择是使用延迟量词?,因为它表示以下内容:

  

匹配前面标记的0或1,有效地使其成为可选。

如果您将-1或任何数字的匹配组指定为可选,则含义:

(-\d)?

因此你会得到一个正则表达式:

test_Index_(\d{6})(-\d)?_E01\.pdf

另外,请确保您了解+令牌的使用情况以及您逃脱期限。