在 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 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.