检查字符串变量是否在字符串中

时间:2017-11-12 23:25:05

标签: python string

我应该注意,我们只允许使用内置的python字符串函数和循环函数。

A ='下注[bge] geee [tb] bb'

B =' betggeeetbb'

方括号表示括号内的任何一个字符均可使用,因此您可以

  1. 赌注b {geee {1}} BB
  2. 赌注t {geee {1}} BB
  3. 赌注g {geee {1}} BB
  4. 赌注t {geee {1}} BB
  5. 赌注e {geee {1}} BB
  6. 赌注t {geee {1}} BB
  7. 如何检查A将具有可在B中找到的组合。 A可以包含任意数量的括号,每个方括号中至少包含2个字符和最多4个字符

    谢谢

2 个答案:

答案 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

在您将其自由地添加到现有项目之前,请确保您理解:

最后,在学习正则表达式(类似于学习类继承)时,很有可能在任何地方使用它们。默想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'))