最终,我试图从匹配特定字符和数字模式的文件路径中检索子字符串。但在这一点上,我只是想让我的模式匹配正确。问题是我并不总是知道匹配字符串中有多少个字符
例如,广义模式是:所有大写字母后跟下划线、4位数字、下划线,然后混合使用大小写字符和数字
文件路径/here/of/unknown/length/这是一个模式\u 1111\u Iwanttomatch/
到目前为止,我已经尝试了re.compile(r'\b[A-Z]+_\d{4}_[a-zA-Z][0-9]*')
的变体
然而,这仍然捕获了模式的大写部分散布着小写字符的情况
下面是一个测试用例:
import re
file_path = [
"C:/Users/csadf/asfsf/Test",
"BEAVERHEAD_2020_thisisatestQL1",
"BEAVERHEAD_2020_thisisatest",
"BEAVeRHEAD_2020_thisisatest",
"C:/Users/csadf/asfsf/Test/BEAVERHEAD_2020_thisisaTest1",
"C:/Users/csadf/asfsf/Test/BEAVERHEAD_202_thisisaTest1",
"C:/Users/csadf/asfsf/Test/BEAVERHEAD_2020_thisisaTest1/data/dfjt/rth"]
projectname_pattern = re.compile(r'\b[A-Z]+[a-z]{0}[A-Z]+_\d{4}_[a-zA-Z][0-9]*')
for i in file_path:
if projectname_pattern.search(i):
print("Found a match: ",i)
else:
print("no match")
在本例中,我希望它返回:
no match
Found a match
Found a match
no match
Found a match
no match
Found a match
编辑:更正了测试用例中的错误。而且,我似乎无意中回答了自己的问题。上面的正则表达式似乎有效
测试输出表明您的正则表达式能够完美地按照您所述的模式工作:
C:/Users/csadf/asfsf/TestBEAVERHEAD\u 2020\u的大小写不匹配,因为BEAVERHEAD前面没有单词边界(\b)
你能仔细检查一下你的要求并重申一下吗
相关问题 更多 >
编程相关推荐