在数字之前只允许文本和多个0,而不是[1-9]

R. *_*oel 2 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不匹配的任何想法?

注意:我看到类似的其他线程不受欢迎,所以我试图让我的问题清楚,因为其他人没有提供解决方案.

Joh*_*ohn 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*是,你在你的问题中提到的文件数量.

  • @ R.Swanepoel`Fode ="^.*[\\\ /] [^ 0-9]*0*"&DocNumber&"\ ..*$"`应该做的伎俩. (2认同)