簡體   English   中英

Python REGEX 如何從變量中提取特定數字

[英]Python REGEX How to extract particular numbers from variable

我有以下問題:

var a = ' 15159970 (30.12.2015), 15615115 (01.01.1970), 11224455, 55441123

我想要一個正則表達式來只提取數字:15159970、15615115、11224455、55441123

到目前為止有什么:

re.findall(r'(\d+\s)\(', a)

只提取前 2 個數字:15159970, 15615115

還有第二個 var b = 15159970, 15615115, 11224455, 55441126 我想比較這兩個變量,如果它們不同,則打印(“變量不同!”)

謝謝!

您可以提取所有前面沒有 digit 或 digit + dot 並且后面沒有 dot + digit 或 digit 的數字塊

(?<!\d)(?<!\d\.)\d+(?!\.?\d)

查看正則表達式演示

細節

  • (?<!\\d) - 一個負向后視,在緊跟一個數字之前的位置失敗
  • (?<!\\d\\.) - 一個負向后視,在緊跟在一個數字和一個點前面的位置失敗
  • \\d+ - 1+ 位數
  • (?!\\.?\\d) - 一個負向前瞻,失敗的位置緊跟一個數字或一個點 + 一個數字。

Python 演示

import re
a = ' 15159970 (30.12.2015), 15615115 (01.01.1970), 11224455, 55441123 '
print( re.findall(r'(?<!\d)(?<!\d\.)\d+(?!\.?\d)', a) )
# => ['15159970', '15615115', '11224455', '55441123']

另一種解決方案:只提取括號外的數字塊

請參閱此 Python 演示

import re
text = "15159970 (30.12.2015), 15615115 (01.01.1970), 11224455, 55441123 (28.11.2014 12:43:14)"
print( list(filter(None, re.findall(r'\([^()]+\)|(\d+)', text))) )
# => ['15159970', '15615115', '11224455', '55441123']

這里, \\([^()]+\\)|(\\d+)匹配

  • \\([^()]+\\) - ( ,除()之外的任何 1+ 個字符,然后)
  • | - 或者
  • (\\d+) - 匹配並捕獲到第 1 組的一位或多位數字(如果模式中有捕獲組,則re.findall僅包括捕獲的子字符串)。

當發生非括號匹配時,結果中會出現空項目,因此,我們需要刪除它們(使用list(filter(None, results))或使用[x for x in results if x] )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM