我应该注意,我们只允许使用内置的python字符串函数和循环函数。
A ='下注[bge] geee [tb] bb'
B =' betggeeetbb'
方括号表示括号内的任何一个字符均可使用,因此您可以
b
{geee {1}} BB t
{geee {1}} BB g
{geee {1}} BB t
{geee {1}} BB e
{geee {1}} BB t
{geee {1}} BB 如何检查A将具有可在B中找到的组合。 A可以包含任意数量的括号,每个方括号中至少包含2个字符和最多4个字符
谢谢
答案 0 :(得分:0)
阅读regular expressions library。该解决方案实际上是re.match
函数,其文档包括以下内容:
[]
用于表示一组字符。在一组:
- 可以单独列出字符,例如[amk]会匹配' a' m' m'或''
。
由于正则表达式出于自己的目的使用反斜杠(除了Python的常规转义,例如"\n"
表示换行符),raw strings在匹配字符串中是惯用的。
>>> import re
>>> A = r'bet[bge]geee[tb]bb'
>>> B = 'betggeeetbb'
>>> m = re.match(A, B)
>>> m
<_sre.SRE_Match object; span=(0, 11), match='betggeeetbb'>
>>> m.group(0)
'betggeeetbb'
如果(比方说)第二个括号不匹配,您还可以验证它是否匹配:
>>> C = "betggeeezbb"
>>> m = re.match(A, C)
>>> m is None
True
在您将其自由地添加到现有项目之前,请确保您理解:
[bge]
匹配的角色)?最后,在学习正则表达式(类似于学习类继承)时,很有可能在任何地方使用它们。默想this koan from Jamie Zawinski:
有些人在面对问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题。
答案 1 :(得分:0)
将问题分解为更简单的任务是最容易的。有很多方法可以将模式从纯字符串转换为具有更多结构的东西,但是这里只使用普通字符串操作来启动:
def parse_pattern(pattern):
'''
>>> parse_pattern('bet[bge]geee[tb]bb')
['b', 'e', 't', ['b', 'g', 'e'], 'g', 'e', 'e', 'e', ['t', 'b'], 'b', 'b']
'''
in_group = False
group = []
result = []
# Iterate through the pattern, character by character
for c in pattern:
if in_group:
# If we're currently parsing a character
# group, we either add a char into current group
# or we end the group and go back to looking at
# normal characters
if c == ']':
in_group = False
result.append(group)
group = []
else:
group.append(c)
elif c == '[':
# A [ starts a character group
in_group = True
else:
# Otherwise, we just handle normal characters
result.append(c)
return result
def check_if_matches(string, pattern):
parsed_pattern = parse_pattern(pattern)
# Useful thing to note: `string` and `parsed_pattern`
# have the same number of elements once we parse the
# `pattern`
...
if __name__ == '__main__':
print(check_if_matches('betggeeetbb', 'bet[bge]geee[tb]bb'))