我想创建正则表达式以匹配它们是否是命令的子字符串。
示例:configure terminal
如果至少匹配:conf t
我尝试使用:r'conf(igure)?\s*t(erminal)?'
但它符合" conf txxxxx"同样。
另外,它没有匹配" config t"
我的问题是我想创建类似这样的匹配。
匹配度: 配置 配置术语 conf t
不匹配: confmin tminal
如果匹配可选,则需要按顺序排列。
谢谢!
答案 0 :(得分:1)
正则表达式不是一个非常好的解决方案,因为它不是特别适合这样的测试,也不容易配置,可维护和扩展。
最好是编写一个单独的函数,针对可能的匹配i
测试单个输入m
,如果
True
len(i) >= minimum_length_required
和i
相同,与m
的长度相匹配。这适用于单字条目:
def partialMatch(entry, full, minimum):
return len(entry) >= minimum and entry == full[:len(entry)]
>>> print (partialMatch('con', 'configure', 4))
False
>>> print (partialMatch('config', 'configure', 4))
True
>>> print (partialMatch('confiture', 'configure', 4))
False
但是多字命令需要更多的工作,因为必须检查每个单独的单词 - 并且,可能有一长串可能的命令。但是,一般的想法应该是这样的:
def validate(entry, cmd_list):
entry = entry.split()
if len(entry) != len(cmd_list):
return False
for index,word in enumerate(entry):
if not partialMatch(word, cmd_list[index].replace('#',''), cmd_list[index].find('#')):
return False
return True
其中cmd_list
包含允许的条目列表,#
字符与最小条目文本的位置匹配。所以你可以做到
>>> print (validate ('conf', ['conf#igure', 't#erminal']))
False
>>> print (validate ('conf t', ['conf#igure', 't#erminal']))
True
>>> print (validate ('configure t', ['conf#igure', 't#erminal']))
True
>> print (validate ('conf #', ['conf#igure', 't#erminal']))
False
(当然,您通常不会将有效命令存储在此调用本身中,而是存储在较长的列表中,并在其上循环以查找有效命令。)
答案 1 :(得分:0)
这是示例
s="conf fxxx "
if not s.find('conf t'):
print('yes')
else:
print('no')
答案 2 :(得分:0)
在这里详细阐述@ usr2564301评论,
bitor(cleared_pixels, secret)