我需要处理中间不能有*
的输入字符串,但如果它确实以*
开始或结束,它需要以*.
开始或以.*
结束(不能两者都有,最多允许一个*
)
第一部分是检查它中间是否有*
,但是如果它以*
开始或结束而没有.
,那么它也是无效的。
import re
def invalid_syntax(str):
regex_str = '(?<!^)\*(?!$)'
if re.search(regex_str, str):
return True
return False
它应该表现如下:
invalid_syntax('exampleStr') == False
invalid_syntax('*.exampleStr') == False
invalid_syntax('*exampleStr') == True
invalid_syntax('examp*leStr') == True
invalid_syntax('ex*ampleStr') == True
invalid_syntax('exampleStr*') == True
invalid_syntax('*.exampleStr*') == True
invalid_syntax('*.exampleStr.*') == True
invalid_syntax('exampleStr.*') == False
2条答案
按热度按时间mw3dktmi1#
如果正则表达式被证明是一个斗争,考虑使用标准字符串操作代替。这可能会导致代码更接近于问题陈述,并且更容易理解/维护:
下面是一个测试运行:
注意,问题规范并不是100%清楚是否允许单个
*
。可能这应该被拒绝,因为它既以恒星开始又以恒星结束。要添加此要求,只需添加and len(s) != 1
。fae0ux8s2#
如果你想要一个正则表达式,你可以尝试(regex101):
^[^*]*$
-> match if string doesn't contain*
或:
^\*\.[^*]*$
-> match if string begins with*.
and doesn't contain additional*
或:
^[^*]+\.\*$
-> match if string以.*
结尾并且不包含额外的*