亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

表達式中的正則表達式“AND”提取這個和那個

表達式中的正則表達式“AND”提取這個和那個

慕后森 2023-10-18 21:32:31
我正在努力編寫一個正則表達式來提取下面以粗體顯示的數字。我為每個值設置了 3 個不同的正則表達式,但由于最后一個值之間可能有空格,我不知道如何在此處容納“AND”。輪胎 = '輪胎:P 275 / 65 R 18 A/S;275 / 65 R 18自動變速箱 貓頭鷹;265 / 70 R 17 A/T 貓頭鷹;'我已經嘗試過了,它適用于前兩個,但不適用于最后一個。我想在單個正則表達式中包含最后一個。p1 = re.compile(r'(\d+)/')p2 = re.compile(r'/(\d+)')p3 = re.compile(r'(?=.*[R](\d+))(?=.*[R]\s(\d+))')我嘗試過不同的東西,這是我嘗試的最后一個代碼,但結果不成功如果我這樣做p1.findall(tire), p2.findall(tire), p3.findall(tire)我想看到這個:(['275', '275', '265'], ['65', '65', '70'], ['18', '18', '17'])
查看完整描述

1 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

你就快到了!您不需要三個單獨的正則表達式。相反,請在單個正則表達式中使用多個捕獲組。

(\d{3})\/(\d{2})R\s?(\d{2})

嘗試一下: https: //regex101.com/r/Xn6bry/1

解釋:

  • (\d{3}):捕獲三位數字

  • \/: 匹配正斜杠

  • (\d{2}):捕獲兩位數

  • R\s?:匹配R后跟一個可選的空格

  • (\d{2}):捕獲兩位數。

在 Python 中,執行以下操作:

p1 = re.compile(r'(\d{3})\/(\d{2})R\s?(\d{2})')

tire = 'Tire: P275/65R18 A/S; 275/65R 18 A/T OWL;265/70R 17 A/T OWL;'

matches = re.findall(p1, tire)

現在如果你看一下matches,你會得到 [('275', '65', '18'), ('275', '65', '18'), ('265', '70', '17')]


將其重新排列為您想要的格式應該非常簡單:


# Make an empty list-of-list with three entries - one per group

groups = [[], [], []]

for match in matches:

    for groupnum, item in enumerate(match):

        groups[groupnum].append(item)

現在groups是[['275', '275', '265'], ['65', '65', '70'], ['18', '18', '17']]


查看完整回答
反對 回復 2023-10-18
  • 1 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號