首页 > 解决方案 > 数字前只允许文本和多个 0,不允许 [1-9]

问题描述

我正在尝试将 excel 文件中的文档编号与文件夹中的文件匹配。

示例文件目录:

A) "C:\Users\directory\Supplier\Invoice1.pdf"

B) "C:\Users\directory\Supplier\Invoice001.pdf"

C) "C:\Users\directory\Supplier\Invoice101.pdf"

D) "C:\Users\directory\Supplier\Invoice10.pdf"

E) "C:\Users\directory\Supplier\Invoice21.pdf"

我的正则表达式模式匹配 A、B 和 C,但应该只匹配 A 和 B。

Pattern = "(^|[^1-9])(DocNumber)([^0-9]|$)", 在我的示例中 DocNumber = 1 (也可以是任何其他数字)。

关于如何改进我的公式以不匹配 C 的任何想法?

注意:我看到与此类似的其他线程不受欢迎,因此我试图澄清我的问题,因为其他线程没有为我提供解决方案。

标签: regexexcelvba

解决方案


尝试这样的事情:^.*[\\\/][^0-9]*0*1\..*$

此处看到的示例:https ://regex101.com/r/O7RdEq/4

解释:

  • ^.*[\\\/]- 将所有内容匹配到最后一个斜线
    • [\\\/]- 匹配单个反斜杠或单个正斜杠;请注意,两个斜杠都使用反斜杠进行转义。
  • [^0-9]*0*1\..*$- 匹配每个非数字直到并包括任何前导“0”,然后是您的文档编号,然后是文件扩展名
    • [^0-9]*- 匹配可选“0”之前的任何非数字;防止像“101”这样的情况
    • 0*1- 文件编号前的可选“0”(在这种情况下为 1)
    • \..*$- 匹配文字.,然后匹配任何字符,直到行尾;应该处理文件扩展名。

1之后0*是您在问题中提到的文件编号。


推荐阅读