我正在寻找一个正则表达式来从文件名中提取字符串
例如,如果文件名格式为" anythingatallanylength_123_TESTNAME.docx",我有兴趣提取" TESTNAME" ...可能固定长度为8.(顺便说一下,123可以是任意三位数字)
我想我可以使用正则表达式匹配... " * _ [0-9] [0-9] [0-9] _ [AZ] [AZ] [AZ] [AZ] [AZ] [AZ] [AZ] [AZ] .DOCX $ "
然而,这与整个事情相符。我怎样才能获得" TESTNAME"?
由于
答案 0 :(得分:1)
使用括号匹配整个正则表达式的特定部分。 您还可以使用花括号指定匹配字符的计数,并使用\ d表示[0-9]。
在C#中:
var myRegex = new Regex(@"*._\d{3}_([A-Za-z]{8})\.docx$");
现在" TESTNAME"或者你的8个字母的部分将在你使用它后的正则表达式的捕获集合中找到。
另请注意,正如其他一些解决方案所示,前瞻和后视将会产生性能开销。
答案 1 :(得分:0)
您可以使用后视和前瞻来检查零件而不匹配它们:
(?<=_[0-9]{3}_)[A-Z]{8}(?=\.docx$)
请注意,这是区分大小写的,您可能希望使用其他字符类和/或量词来满足您的确切模式。
答案 2 :(得分:0)
以您的文件名格式“anythingatallanylength_123_TESTNAME.docx”,您尝试匹配的模式是string
之前的.docx
和下划线_
。记住以前任何_
都不匹配的事情,我提出了以下解决方案。
正则表达式: (?<=_)[A-Za-z]*(?=\.docx$)
使用的标志:
g
全球搜索m
多行搜索。<强>解释强>
(?<=_)
检查文件名前是否有underscore
。(?=\.docx$)
检查最后的延期。[A-Za-z]*
检查所需的匹配。的 Regex101 Demo 强>
答案 3 :(得分:0)
感谢@Lucero @noob @JamesFaix我想出了......
@ “(小于?= * [0-9] {3} )[A-Z] {8}(?= DOCX $)”
所以看一下(括号中,以?&lt; =开头)任何东西(即零或多个任何字符(用“。”表示)后跟一个下划线,然后是数字,然后是下划线。这就是后面的结尾。现在匹配我需要的东西(八个字母)。最后,向前看(在括号中,以?=开头),即.docx
好的工作,伙计们。雷鸟飞走了。