HJ71 题解 | #字符串通配符#
字符串通配符
https://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036
import re while True: try: a=input().lower()#题目说了不区分大小写,这里直接转小写 b=input().lower() a=a.replace(".","\.")#处理正则表达式中的元字符 a=a.replace("*","[0-9a-z]*")#将通配符用正则表达式规则写出来 a=a.replace("?","[0-9a-z]{1}") if b in re.findall(a,b):#判断以a做模式时能否匹配出和b一模一样的结果 print("true") else: print("false") except: break
这道题出题者应该是想考正则表达式,但是数据给得应该比较弱,如果给很强的数据,我上面这个代码是过不了的,因为只针对点号.这个元字符做了处理,没有处理其他很多的元字符。
这里随便给出几组测试用例:
用例1
输入: z+ zz 输出: false
用例2
输入: [a-z] a 输出: false
如果要完整地通过所有hack数据(包括我没给出来的),上面这个代码需要做很多的正则表达式元字符处理才行。
#华为##华为od##华为机试##华为od机试##正则表达式#华为HJ103所有解法 文章被收录于专栏
这是我准备华为od面试的专属专栏,我会把自己的解法更新在里面,我会尽量写清楚自己的思路以及多写关键注释,希望对阅读的人有帮助~~~