如何将以下文件名转换为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$