我正在打字时正在与正则表达式作斗争.
我想确定以下示例文件的模式:b410cv11_test.ext
.我希望能够搜索与上述示例文件的模式匹配的文件.我从哪里开始(如此迷失和困惑)以及获得最符合文件模式的解决方案的最佳方法是什么?提前致谢.
进一步澄清问题:
我希望模式如下:必须以'b'开头,后跟三位数字,然后是'cv',接着是两位数字,然后是下划线,接着是'release',接着是.'ext'
既然你有一个人类可读的文件名描述,那么将其翻译成正则表达式是非常简单的(至少在这种情况下;)
必须从
插入符号(^
)将正则表达式锚定到您想要匹配的开头,因此您必须从此符号开始.
'B',
你的re中的任何非特殊字符都会按字面意思匹配,所以你只需使用"b"表示这一部分:^b
.
接着是[...]位数,
这取决于你使用哪种味道:
表达这一点的最常用方法是使用方括号([]
).这些意思是"匹配其中列出的任何一个字符.[ASDF]
例如,匹配任一A
或S
或D
或F
,[0-9]
将匹配0到9之间的任何内容.
您的库可能有"任何数字"的快捷方式.在sed
和awk
你可以使用[[:digit:]]
[sic!],在python和许多其他语言,你可以使用\d
.
所以现在你重读^b\d
.
其次是三个[...]
表达这个的最简单的方法就是像这样重复原子三次:\d\d\d
.
您的语言可能会提供一个快捷方式:大括号({}
).有时您必须使用反斜杠来逃避它们(如果您使用sed或awk,请阅读"扩展正则表达式").他们还给你一种方式来说"至少x,但不超过前一个原子的y出现":{x,y}
.
现在你有: ^b\d{3}
然后是'cv',
文字匹配再次,现在我们有 ^b\d{3}cv
后跟两位数,
我们已经涵盖了这个:^b\d{3}cv\d{2}
.
然后是下划线,然后是'release',然后是.'ext'
同样,这应该完全匹配,但dot(.
)是一个特殊字符.这意味着你必须用反斜杠来逃避它:^\d{3}cv\d{2}_release\.ext
省略反斜杠意味着像"b410cv11_test_ext"这样的文件名也会匹配,这对你来说可能是也可能不是问题.
最后,如果你想保证".ext"之后没有其他内容,请将re锚定到要匹配的东西的末尾,使用美元符号($
).
因此,针对您的特定问题的完整正则表达式将是:
^b\d{3}cv\d{2}_release\.ext$
简单.
无论您使用何种语言或库,都必须在文档中的某处提供参考,以便向您展示您的案例中的确切语法.一旦您学会将问题分解为合适的描述,就会逐步了解更高级的结构.