在 Python 中查找最长的连续字母和数字子字符串


给定的字符串可能是数字和字母的混合。在本文中,我们需要找到包含字母和数字的最大的子字符串。

使用 re 模块

正则表达式模块可用于查找所有包含数字或字母的连续子字符串。然后我们应用 max 函数仅选择在所有找到的子字符串中具有最大长度的字母和数字的连续子字符串。findall 函数也用于识别和获取所需的子字符串。

示例

 在线演示

import re

def longSubstring(str):
   letter = max(re.findall(r'\D+', str), key=len)
   digit = max(re.findall(r'\d+', str), key=len)

   return letter, digit

str = 'Hello 459 Congratulations! 234'
print(longSubstring(str))

输出

运行以上代码将得到以下结果:

(' Congratulations! ', '459')

使用 len() 和 While 循环

这是一种直接但缓慢的方法,我们设计 While 循环来检查给定字符串中作为子字符串存在的数字和字母的长度。然后我们比较它们的长度,只选择长度最大的子字符串。

示例

 在线演示

def longSubstring(s):
   max_letterSeq = ''
   max_digitSeq = ''
   i = 0
   while (i < len(s)):

      current_letterSeq = ''
      current_digitSeq = ''

      # Letters
      while (i < len(s) and s[i].isalpha()):
         current_letterSeq += s[i]
         i += 1

      # Digits
      while (i < len(s) and s[i].isdigit()):
         current_digitSeq += s[i]
         i += 1

      # Check if not digit or alphabet
      if (i < len(s) and not (s[i].isdigit())
            and not (s[i].isalpha())):
         i += 1

      if (len(current_letterSeq) > len(max_letterSeq)):
         max_letterSeq = current_letterSeq

      if (len(current_digitSeq) > len(max_digitSeq)):
         max_digitSeq = current_digitSeq

   return max_letterSeq, max_digitSeq

str = 'Hello 459 Congratulations! 234'
print(longSubstring(str))

输出

运行以上代码将得到以下结果:

('Congratulations', '459')

更新于: 2020年8月26日

312 次查看

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告