如何用Python正则完善字符串*字符的无效校验规则
字符串校验规则实现优化
需求梳理
需要校验的字符串规则明确如下:
- 字符串中间不能包含
*字符 - 若以
*开头,必须是*.格式(*后必须紧跟.) - 若以
*结尾,必须是.*格式(*前必须紧跟.) - 最多允许出现一个
* - 不允许同时在首尾都带有
*
现有代码仅完成了“中间不能有*”的校验,需要补充其余规则的判断逻辑。
优化后的代码
import re def invalid_syntax(s): # 匹配所有无效场景的正则表达式 invalid_pattern = r'(?<!^)\*(?!$)|^\*(?!\.)|(?<!\.)\*$|(\*).*\1|^\*.*\*$' return bool(re.search(invalid_pattern, s))
正则逻辑拆解
正则表达式的每个部分对应一种无效情况:
(?<!^)\*(?!$):匹配不在字符串首尾的*(即中间出现*,比如examp*leStr)^\*(?!\.):匹配以*开头但后续不是.的情况(比如*exampleStr)(?<!\.)\*$:匹配以*结尾但前面不是.的情况(比如exampleStr*)(\*).*\1:匹配出现多个*的情况(比如*.exampleStr.*)^\*.*\*$:匹配首尾同时存在*的情况(比如*.exampleStr*)
测试验证
用给出的测试用例验证,结果完全符合预期:
# 有效场景返回False assert invalid_syntax('exampleStr') == False assert invalid_syntax('*.exampleStr') == False assert invalid_syntax('exampleStr.*') == False # 无效场景返回True assert invalid_syntax('*exampleStr') == True assert invalid_syntax('examp*leStr') == True assert invalid_syntax('ex*ampleStr') == True assert invalid_syntax('exampleStr*') == True assert invalid_syntax('*.exampleStr*') == True assert invalid_syntax('*.exampleStr.*') == True
内容的提问来源于stack exchange,提问作者TKTR
相关产品推荐
相关产品推荐

