当前位置:  开发笔记 > 开发工具 > 正文

如何在此RegEx中指定可选的捕获组?

如何解决《如何在此RegEx中指定可选的捕获组?》经验,为你挑选了1个好方法。

如何修复此RegEx以选择性地捕获文件扩展名?

我试图将字符串与可选组件匹配,但似乎有些错误.(匹配的字符串来自打印机日志.)


我的RegEx(.NET Flavor)如下:

.*(header_\d{10,11}_).*(_.*_\d{8}).*(\.\w{3,4}).*
-------------------------------------------
.*                   # Ignore some garbage in the front
(header_             # Match the start of the file name,
    \d{10,11}_)      #     including the ID (10 - 11 digits)
.*                   # Ignore the type code in the middle
(_.*_\d{8})          # Match some random characters, then an 8-digit date
.*                   # Ignore anything between this and the file extension
(\.\w{3,4})          # Match the file extension, 3 or 4 characters long
.*                   # Ignore the rest of the string


我希望这匹配如下字符串:

str1 = "header_0000000602_t_mc2e1nrobr1a3s55niyrrqvy_20081212[1].doc [Compatibility Mode]"
str2 = "Microsoft PowerPoint - header_00000000076_d_al41zguyvgqfj2454jki5l55_20071203[1].txt"
str3 = "header_00000000076_d_al41zguyvgqfj2454jki5l55_20071203[1]"


捕获组返回的内容如下:

$1  =  header_0000000602_
$2  =  _mc2e1nrobr1a3s55niyrrqvy_20081212
$3  =  .doc


如果没有找到文件扩展名,$ 3可以为空.$ 3是可选部分,如上面的str3所示.

如果我加"?" 到第三个捕获组"(.\ w {3,4})?"结束时,RegEx不再为任何字符串捕获3美元.如果我添加"+"而不是"(.\ w {3,4})+",则RegEx根本不再捕获str3,这是预期的.

我觉得用"?" 在第三个捕获组的末尾是适当的事情,但它不能像我期望的那样工作.对于我用来忽略字符串部分的".*"部分,我可能太天真了.


不按预期工作:

.*(header_\d*_).*(_.*_.{8}).*(\.\w{3,4})?.*

Sean Bright.. 5

一种可能性是倒数第二个.*是贪婪的.您可以尝试将其更改为:

.*(header_\d*_).*(_.*_.{8}).*?(\.\w{3,4})?.*
                             ^ Added that

这不正确,这个将匹配您提供的输入,但它假定.它遇到的第一个是文件扩展名的开头:

.*(header_\d*_).*(_.*_.{8})[^\.]*(\.\w{3,4})?.*

编辑:删除我在第二个正则表达式中的转义.



1> Sean Bright..:

一种可能性是倒数第二个.*是贪婪的.您可以尝试将其更改为:

.*(header_\d*_).*(_.*_.{8}).*?(\.\w{3,4})?.*
                             ^ Added that

这不正确,这个将匹配您提供的输入,但它假定.它遇到的第一个是文件扩展名的开头:

.*(header_\d*_).*(_.*_.{8})[^\.]*(\.\w{3,4})?.*

编辑:删除我在第二个正则表达式中的转义.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有