簡體   English   中英

從Python中的字符串中提取連續的數字字符

[英]Extract continuous numeric characters from a string in Python

我有興趣提取出現在一組字符( 'AA=' )之后的數字。 但是,問題是:(i)我不知道數字有多長,(ii)我不知道數字后面出現的內容(可能是空格或除 0-9 之外的任何字符,請考慮我不知道這些字符可能是什么,但它們絕對不是 0-9),(iii)數字可以以指數形式出現(下面的第 4/5 行)

下面給出了我可以擁有的許多輸入中的幾個。

Line 1: 123 NUBA AA=1.2345 $BB=1234.55
Line 2: 123 NUBA MM AA=1.2345678&BB=1234.55
Line 3: 123 NUBA RRNJH AA=1.2#ALPHA
Line 4: 123 NUBA ABCD AA=1.2E-5 GBRO
Line 5: 123 NUBA ABCD AA=1.245E-7$ MN
...

結果應該是: 1.2345 1.2 1.2345678 1.2e-5 1.245e-7對於上面的每一行。

PS:我知道如何使用.find並獲取AA=的起始位置,但這對上述情況不是很有幫助。 另外,我知道一種方法可能是在AA=之后循環遍歷每個字符,如果空格或除 [ 0-9 , . , E , - ] 被看到,但這很笨拙並且在我的代碼中占用了不必要的空間 我正在尋找一種更簡潔的方法來做到這一點。

您可以將單個模式與捕獲組一起使用。 例如,使用re.findall僅獲取捕獲組的值。

\bAA=(\d+(?:\.\d+)?(?:[eE][-+]?[0-9]+)?)

解釋

  • \bAA=一個單詞邊界,然后匹配AA=
  • (捕獲組 1
    • \d+匹配 1+ 個數字
    • (?:\.\d+)? 匹配可選的小數部分
    • (?:[eE][-+]?[0-9]+)? 匹配可選的指數部分
  • )關閉組 1

正則表達式演示

import re
 
regex = r"\bAA=(\d+(?:\.\d+)?(?:[eE][-+]?[0-9]+)?)"
 
s = ("Line 1: 123 NUBA AA=1.2345 $BB=1234.55\n"
    "Line 2: 123 NUBA MM AA=1.2345678&BB=1234.55\n"
    "Line 3: 123 NUBA RRNJH AA=1.2#ALPHA\n"
    "Line 4: 123 NUBA ABCD AA=1.2E-5 GBRO\n"
    "Line 5: 123 NUBA ABCD AA=1.245E-7$ MN")
 
print(re.findall(regex, s))

Output

['1.2345', '1.2345678', '1.2', '1.2E-5', '1.245E-7']

Python 演示

這將為您提供您想要的 output

import re

string1 = '123 NUBA AA=1.2345 $BB=1234.55'
string2 = '123 NUBA MM AA=1.2345678&BB=1234.55'
string3 = '123 NUBA RRNJH AA=1.2#ALPHA'

re.findall(r'\d+\.*\d*', string1[string1.find("AA="):])[0]
re.findall(r'\d+\.*\d*', string2[string2.find("AA="):])[0]
re.findall(r'\d+\.*\d*', string3[string3.find("AA="):])[0]

Output

1.2345
1.2345678
1.2

暫無
暫無

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

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