【问题标题】:Find all symbols and spaces together between two alphanumeric characters in Python3在Python3中查找两个字母数字字符之间的所有符号和空格
【发布时间】:2021-07-26 23:07:46
【问题描述】:

在这个问题中,我试图在两个字母数字字符之间查找符号和空格。我正在使用正则表达式,但我无法得到我想要的结果。对此代码的任何有价值的技巧都表示赞赏(仅适用于正则表达式解决方案):

import re
s = "This$#is% Matrix#  %!"
regex_pattern = '\w(.[@_!#$%^&*()<>?/\|}{~:\s]*)\w' # needed to be solve
re.findall(regex_pattern, s) 

输出是:

['h', '$#', '% ', 't']

预期输出是:

['$#', '% ']

【问题讨论】:

    标签: python regex


    【解决方案1】:

    你可以试试这个简单的模式:

    import re
    s = "This$#is% Matrix#  %!"
    regex_pattern = '(?<=\w)[^\w]+?(?=\w)'
    print(re.findall(regex_pattern, s))
    

    输出:

    ['$#', '% ']
    

    基本上,模式(?&lt;=\w)[^\w]+?(?=\w) 搜索所有非字母数字字符(长度必须至少为一个字符),它们在两个字母数字字符之间。

    【讨论】:

    • 更简单实用的一种。谢谢老兄。
    【解决方案2】:

    使用正则表达式查找所有方法:

    s = "This$#is% Matrix#  %!"
    matches = re.findall(r'(?<=\w)[@_!#$%^&*()<>?/\|}{~:\s]+(?=\w)', s)
    print(matches)  # ['$#', '% ']
    

    这种方法与您的方法类似,不同之处在于它只是搜索两边被单词字符包围的一系列符号或空白字符。

    【讨论】:

      【解决方案3】:

      您的正则表达式使用量词 *(0 或更多)来匹配一系列非字母字符,因此您得到的匹配项之间没有非字母字符;您应该使用 + 来匹配一个或多个非字母字符:

      import re
      s = "This$#is% Matrix#  %!"
      
      regex_pattern = r'\w([@_!#$%^&*()<>?/\|}{~:\s]+)\w' # needed to be solve
      print(re.findall(regex_pattern, s) )
      

      输出:

      ['$#', '% ']
      

      我的“诀窍”是使用例如regex101.com 以确保在开始编码之前正则表达式正常工作,并一次构建一个步骤的正则表达式,以便您知道何时添加一个步骤并且正则表达式停止匹配它是导致问题的最新步骤。

      【讨论】:

        【解决方案4】:

        您的最短解决方案是

        import re
        s = "This$#is% Matrix#  %!"
        regex_pattern = r'\b\W+\b'
        print( re.findall(regex_pattern, s) ) # => ['$#', '% ']
        

        请参阅online Python demo

        为什么会起作用

        • \b - 后跟\W 模式的单词边界匹配单词字符(即字母、数字或_)之后的位置
        • \W+ - 匹配一个或多个非单词字符,即字母、数字和下划线以外的字符
        • \b - 紧跟在 \W 之后,单词边界匹配紧跟单词 char 的位置。

        请参阅regex demo

        【讨论】:

          猜你喜欢
          • 2016-02-28
          • 2021-05-07
          • 1970-01-01
          • 1970-01-01
          • 2018-04-14
          • 1970-01-01
          • 2013-03-01
          • 1970-01-01
          • 2016-11-24
          相关资源
          最近更新 更多