[英]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]+)?
匹配可選的指數部分)
關閉組 1import 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']
這將為您提供您想要的 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.