我正在尝试查找文件名是否符合规则
如果满足规则的文件名将返回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
假设要匹配非重复字符,则:
通过
!?
在第一个捕获组\1
上尝试负前瞻:例如,regex
^(?:(\w)(?!\1))*.java$
匹配任何文件名:.java
结束(以$
表示结束)\w
)开头(^
)\1
引用)不重复的在regex中由一个负的前向
!?
与重复项组合表示,这里是由\1
引用的第一个捕获组(\w)
。而非捕获组在括号内用?:
表示另见:
测试
您的测试用例通过:
zr.java
,因为第一个捕获组(字符z
)没有重复(下面是另一个类似r
)zz.java
,因为第一个捕获组(字符z
)重复regex101上的实时演示:version 1 和extended version 2
相关问题 更多 >
编程相关推荐