如何将以下文件名转换为Python中的正则表达式?
我正在和正则表达式斗争,因为我正在打字 我想确定以下示例文件的模式:如何将以下文件名转换为Python中的正则表达式?,python,regex,Python,Regex,我正在和正则表达式斗争,因为我正在打字 我想确定以下示例文件的模式:b410cv11\u test.ext。我希望能够搜索与上述示例文件模式匹配的文件。我从哪里开始(如此迷茫和困惑)以及找到与文件模式最匹配的解决方案的最佳方法是什么?提前谢谢 问题的进一步澄清: 我希望模式如下:必须以“b”开头,后跟三位数字,后跟“cv”,后跟两位数字,然后是下划线,后跟“release”,后跟“ext”为避免混淆,请按顺序阅读以下内容 首先,您有一个模块,它处理文件名正则表达式,就像Windows和unix
b410cv11\u test.ext
。我希望能够搜索与上述示例文件模式匹配的文件。我从哪里开始(如此迷茫和困惑)以及找到与文件模式最匹配的解决方案的最佳方法是什么?提前谢谢
问题的进一步澄清:
我希望模式如下:必须以“b”开头,后跟三位数字,后跟“cv”,后跟两位数字,然后是下划线,后跟“release”,后跟“ext”为避免混淆,请按顺序阅读以下内容 首先,您有一个模块,它处理文件名正则表达式,就像Windows和unix shell一样 其次,您有一个模块,它只使用unixshell规则进行模式匹配 第三,您有一个模块,它是一套完整的正则表达式
然后再问另一个更具体的问题。你的问题有点不清楚。您说您想要一个正则表达式,但您是否想要一个可以与ls等命令一起使用的glob样式的模式?glob表达式和正则表达式在概念上相似,但在实践中不同(正则表达式功能更强大,在查找文件时,对于最常见的情况,glob样式的模式更容易实现)
同样,你认为是什么模式?当然,*(GOLB)或.*(ReGEX)将与模式匹配。同时,Test.Ext(GOLB)或.Test.Ext(ReGEXP)模式将与其他许多变体相匹配。 你能更具体地描述这个模式吗?例如,你可以把它描述为“b,后跟数字,后跟cv,后跟数字…”
一旦你能用你的母语准确地解释模式(这必须是你的第一步),将其转换为glob或正则表达式模式通常是一项相当简单的任务。如果字母不重要,您可以尝试匹配字母/数字模式的\w\d\d\d\d\u test.ext,或b\d\d\dcv\d\d\u test.ext或两者的混合。在使用正则表达式时,我发现它是一个很大的帮助
/^b\d\d\dcv\d\d_test\.ext$/
然后使用pythonre(regex)模块进行匹配。当然,这是假设regex是您真正需要的,而不是其他人提到的glob
我想要的模式是一样的
如下:必须以“b”开头,然后是
由三位数字组成,后跟“cv”,
后跟两个数字,然后是一个
下划线,后跟“release”,
接“ext”
既然已经有了文件名的可读描述,那么将其转换为正则表达式就很简单了(至少在本例中是;) 必须从 插入符号(
^
)将正则表达式锚定到要匹配的开头,因此re必须以该符号开头
“b”
re中的任何非特殊字符都将按字面意思匹配,因此此部分只需使用“b:^b
后跟[…]位
这在一定程度上取决于您使用的re的味道:
最常用的表达方式是使用括号([]
)。这些括号表示“匹配中列出的任何一个字符。[ASDF]
,例如,将匹配A
或S
或D
或F
,[0-9]
将匹配0到9之间的任何字符
您的re库可能有“任意数字”的快捷方式。在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”
同样,这应该完全符合字面意思,但点(
)是一个特殊字符。这意味着您必须用反斜杠对其进行转义:^\d{3}cv\d{2}\u release\.ext
省略反斜杠意味着像“b410cv11\u test\u ext”这样的文件名也会匹配,这对您来说可能是问题,也可能不是问题
最后,如果要保证“.ext”后面没有其他内容,请将re锚定到要匹配的内容的末尾,使用美元符号($
)
因此,针对特定问题的完整正则表达式为:
^b\d{3}cv\d{2}_release\.ext$
简单
无论您使用何种语言或库,文档中的某个地方都必须有一个参考,以向您展示案例中的确切语法。一旦您学会了将问题分解为合适的描述,您将逐步了解更高级的结构。实际的文件模式是什么n?从一个例子中,我们无法推断您想要什么。就像您编写它的方式:-)顺便说一句,我想指出一点,作为对生成器的一个很好的介绍,在这里您可以学习如何创建Python替换“find”和“grep”“。非常感谢您提供了非常清晰、简洁和详细的解释。我也喜欢你表达的方式——我将使用
^b\d{3}cv\d{2}_release\.ext$