正则表达式以查找文件名满足规则的位置

2024-04-20 13:02:14 发布

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

我正在尝试查找文件名是否符合规则

如果满足规则的文件名将返回true

规则:

1-名称不应是像a,b,c..etc这样的字符

2-名称不应包含在像abb,aab,zbr这样的可疑字符上

我试着这样使用,但在规则2中,问题预期为真,但我得到的是假

正则表达式规则

文件rulepack-filename中的内容示例:

regex:^[a-z]
regex:^(\w)\1*
regex:^((\w)\2)*

检查规则的代码

def check_filename_rules(line):
    rules_list = open('/resources/rulepack-filename').readlines()
    for rule in rules_list:
        rule = rule.strip()
        if "char:" in rule:
            rule = rule.split(":")[1] + "."
            if rule in line:
            return True

        if "regex:" in rule:
            regex_rule = rule.split(":")[1] + ".java"
            p = re.compile(regex_rule)
            if p.findall(line):
               return True
            if p.match(line):
               return True

   return False

示例

输入:

print(check_filename_rules("z.java"))
print(check_filename_rules("zz.java"))
print(check_filename_rules("zr.java"))

输出:

True
True
False

Tags: in名称truereturnif规则checkline
1条回答
网友
1楼 · 发布于 2024-04-20 13:02:14

假设要匹配非重复字符,则:

通过!?在第一个捕获组\1上尝试负前瞻

例如,regex^(?:(\w)(?!\1))*.java$匹配任何文件名:

  • 以扩展名.java结束(以$表示结束)
  • 以单词字符(meta\w)开头(^
  • 不重复其第一个字符(由\1引用)

不重复的在regex中由一个负的前向!?与重复项组合表示,这里是由\1引用的第一个捕获组(\w)。而非捕获组在括号内用?:表示

另见:

测试

您的测试用例通过:

  • 匹配zr.java,因为第一个捕获组(字符z)没有重复(下面是另一个类似r
  • 不匹配zz.java,因为第一个捕获组(字符z)重复

regex101上的实时演示:version 1extended version 2

相关问题 更多 >