html / xhtml文件名的正则表达式

时间:2017-05-10 16:23:58

标签: python regex

我正在尝试为以下内容编写正则表达式:

“任意数量的字符,任何字符直到'ch01'或'chapter01'下一个字符不能是一个数字,然后是任意数量的字符,任何字符直到一个句点并且在句点之后必须有一个html或xhtml “

很抱歉,如果这令人困惑,但有些测试用例可能会有更好的帮助:

x = 'fdsafafsdch01fdsfdsf.xhtml' #pass
y = '9781599048970_ch01__s1_002.html' #pass
z = 'ch01.html' #pass
a = 'chapter019.xhtml' #fail
l = 'chapter01.html' #pass
m = 'chapter010-fn.xhtml' #fail
matches = [x, y, z, a, l, m]

for item in matches:
  print(bool(re.search('ch(apter)?01\D?.*\.x?html',  item)))

(#fail == False,#pass == True

目前所有案例都返回True

1 个答案:

答案 0 :(得分:1)

问题似乎与\D?有关。这意味着"零或一个非数字",因此正则表达式将chapter019解析为" chapter01"其次是零非数字,后跟一个字符,它很乐意匹配。尝试让?影响其后的\D.*

for item in matches:
  print(bool(re.search('ch(apter)?01(\D.*)?\.x?html',  item)))

结果:

True
True
True
False
True
False