如何使用正则表达式匹配长度未知的连续大写字母

2024-09-30 16:24:26 发布

您现在位置:Python中文网/ 问答频道 /正文

最终,我试图从匹配特定字符和数字模式的文件路径中检索子字符串。但在这一点上,我只是想让我的模式匹配正确。问题是我并不总是知道匹配字符串中有多少个字符

例如,广义模式是:所有大写字母后跟下划线、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 

编辑:更正了测试用例中的错误。而且,我似乎无意中回答了自己的问题。上面的正则表达式似乎有效


Tags: 文件notest路径rematch模式数字
1条回答
网友
1楼 · 发布于 2024-09-30 16:24:26

测试输出表明您的正则表达式能够完美地按照您所述的模式工作:

no match:  C:/Users/csadf/asfsf/Test
Found a match:  BEAVERHEAD_2020_thisisatestQL1
Found a match:  BEAVERHEAD_2020_thisisatest
no match:  BEAVeRHEAD_2020_thisisatest
no match:  C:/Users/csadf/asfsf/TestBEAVERHEAD_2020_thisisaTest1
no match:  C:/Users/csadf/asfsf/Test/BEAVERHEAD_202_thisisaTest1
Found a match:  C:/Users/csadf/asfsf/Test/BEAVERHEAD_2020_thisisaTest1/data/dfjt/rth

C:/Users/csadf/asfsf/TestBEAVERHEAD\u 2020\u的大小写不匹配,因为BEAVERHEAD前面没有单词边界(\b)

你能仔细检查一下你的要求并重申一下吗

相关问题 更多 >