Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查字符串变体是否在字符串中_Python_String - Fatal编程技术网

Python 检查字符串变体是否在字符串中

Python 检查字符串变体是否在字符串中,python,string,Python,String,我应该注意,我们只允许使用内置的python字符串函数和循环函数 A='bet[bge]geee[tb]bb' B='betggeeetbb' 方括号表示括号内的任何一个字符都可以使用,因此您可以 下注bgeeetbb 下注ggeeetbb 下注egeeetbb 下注bgeeebbb 下注ggeeebbb 下注egeeebbb 如何检查A是否有一个可在B中找到的组合。 A可以有任意数量的方括号,每个方括号中最少2个字符,最多4个字符 谢谢请仔细阅读。解决方案实际上是re.match函数,其文档包

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

A='bet[bge]geee[tb]bb'

B='betggeeetbb'

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

  • 下注
    b
    geee
    t
    bb
  • 下注
    g
    geee
    t
    bb
  • 下注
    e
    geee
    t
    bb
  • 下注
    b
    geee
    b
    bb
  • 下注
    g
    geee
    b
    bb
  • 下注
    e
    geee
    b
    bb
  • 如何检查A是否有一个可在B中找到的组合。 A可以有任意数量的方括号,每个方括号中最少2个字符,最多4个字符

    谢谢

    请仔细阅读。解决方案实际上是
    re.match
    函数,其文档包括以下内容:

    []
    用于指示一组字符。一组:

    • 可以单独列出字符,例如,[amk]将匹配“a”、“m”或“k”
    由于正则表达式使用反斜杠是出于自己的目的(除了Python的正常转义之外,例如,
    “\n”
    表示换行符),因此在匹配字符串中是惯用的

    >>> 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'
    
    在将此内容随意添加到现有项目之前,请确保您了解:

    • 和之间有什么区别
    • 创建正则表达式的成本是多少?如果重复使用正则表达式,会产生这样的成本吗
    • 您如何选择(例如,示例中由
      [bge]
      匹配的字符)
    • 你会怎么表演
    最后,在学习正则表达式(类似于学习类继承)时,很容易在任何地方使用它们。沉思:

    有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题


    把问题分解成更简单的任务是最容易的。有很多方法可以将模式从纯字符串转换为更具结构的模式,但这里有一些方法仅使用纯字符串操作即可开始:

    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'))
    

    你自己试过什么办法来解决这个问题吗?请出示它,你在找正则表达式then@everyone建议使用正则表达式:正则表达式有很多特性,不仅仅是“方括号中的东西”。除了字符类之外,正确地逃离所有正则表达式元可能比编写非正则表达式更困难。我可以拆分字符串并检查括号前的文本,然后检查括号中的任何可能性,然后检查括号后的文本。但我不确定如何循环它来覆盖n loopsHow你会在没有电脑的情况下进行吗?解决这个问题,将其转化为一个循序渐进的过程,并将其转化为工作代码。您必须使用
    re.fullmatch
    ,或者在正则表达式中添加一个字符串结束锚点
    $
    。另外,请不要使用术语“原始字符串”;它给新手的印象是他们是某种特殊的字符串。请改称它们为“原始字符串文字”。问题是字符串变体是否在另一个字符串中
    fullmatch
    不太合适,甚至可能我关于
    match
    的建议都是错误的。
    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'))