仅允许文本和数字前的多个0,不允许[1-9]

时间:2018-11-05 15:19:34

标签: regex excel vba excel-vba

我正在尝试将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的任何想法?

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

1 个答案:

答案 0 :(得分:6)

尝试类似这样的操作:^.*[\\\/][^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*是您在问题中提到的文件编号。