你的正则表达式仍然存在问题,导致 `re.match()` 无法正确匹配目标字符串。以下是修正方案:
### **问题分析**
1. `+` 号后面不能直接跟 `*`,这在正则表达式中是无效的。
2. `(_+){0,2}` 这个部分的逻辑不清晰,可能不是你想要的匹配方式。
3. `re.match()` 只会从字符串的开头进行匹配,而 `name` 可能出现在 `uvm_scratch_` 之后的某个位置,导致匹配失败。
4. 你的 `pattern` 可能没有正确匹配 `uvm_scratch_` 后面的模块名称。
### **修正后的正则表达式**pattern = r'^uvm_scratch_[a-zA-Z0-9_]+_\d{2}_\d{2}_\d{4}_\d{2}_\d{2}_\d{2}___RTL$'
**解释:**
- `^uvm_scratch_`:确保字符串以 `uvm_scratch_` 开头。
- `[a-zA-Z0-9_]+`:匹配模块名称(如 `work_portlink_test` 或 `spd_lfb`)。
- `\d{2}_\d{2}_\d{4}_\d{2}_\d{2}_\d{2}`:匹配日期时间格式 `03_20_2025_13_57_45`。
- `___RTL$`:确保字符串以 `___RTL` 结尾。
### **修正后的代码**import os
import re
def gen_without_mdl_vdb_file(path, name):
for item in os.listdir(path):
if name in item:
pattern = r'^uvm_scratch_[a-zA-Z0-9_]+_\d{2}_\d{2}_\d{4}_\d{2}_\d{2}_\d{2}___RTL$'
match_pat = re.match(pattern, item)
print(f'Checking: {item}')
print('match_pat:', match_pat)
without_mdl_module_name = ["spd_lfb", "work"]
cur_dir = '.'
for name in without_mdl_module_name:
print('Collect code coverage without mdl module:', name)
gen_without_mdl_vdb_file(cur_dir, name)
### **进一步调试**
如果仍然匹配不到,可以尝试:
1. **打印 `item`**:确保 `os.listdir(path)` 返回的文件名是正确的。
2. **使用 `re.search()` 代替 `re.match()`**:
match_pat = re.search(pattern, item)
`re.search()` 可以匹配字符串的任意位置,而 `re.match()` 只匹配开头。
请尝试上述修改,并检查输出是否符合预期!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |