簡體   English   中英

在Python中使用特殊字符之前和之后獲取字符串

[英]Get string after and before a special Characters in Python

我有以下字符串,從該字符串我想要DDD =和%之間的所有數據

2019-07-25 15:23:13 [Thread-0] DEBUG  - Serial : INFO: QQQ=00000D00001111 AAA=8 BBB=0 CCC=0 DDD=1.08% XXX=2401

我試圖使用以下代碼但無法獲得所需的輸出

my_string="2019-07-25 15:23:13 [Thread-0] DEBUG  - Serial : INFO: QQQ=00000D00001111 AAA=8 BBB=0 CCC=0 DDD=1.08% XXX=2401"
print(my_string.split("DDD=",1)[1])

獲得以下輸出

1.08% XXX=2401

但我看輸出為

either 1.08 or 1.08%

請幫幫我

使用正則表達式。

例如:

import re

s = "2019-07-25 15:23:13 [Thread-0] DEBUG  - Serial : INFO: QQQ=00000D00001111 AAA=8 BBB=0 CCC=0 DDD=1.08% XXX=2401"
m = re.search(r"DDD=(.*?)%", s)  #if you want it to be strict and get only ints use r"DDD=(\d+\.?\d*)%"
if m:
    print(m.group(1))

輸出:

1.08

這是一個使用split兩次而不是正則表達式的選項。 它雖然不是非常靈活,但如果輸入格式略有變化,很容易破壞。 您可以決定哪種選項最適合您的用例。

s = "2019-07-25 15:23:13 [Thread-0] DEBUG  - Serial : INFO: QQQ=00000D00001111 AAA=8 BBB=0 CCC=0 DDD=1.08% XXX=2401"
print(s.split('DDD=')[1].split('%')[0])

結果:

'1.08'

根據您計划對數字執行的操作,您可能還希望將其強制轉換為數字類型:

print(float(s.split('DDD=')[1].split('%')[0]))

結果:

1.08

要匹配DDD =和%之間的所有數據

import re

test_str = "2019-07-25 15:23:13 [Thread-0] DEBUG  - Serial : INFO: QQQ=00000D00001111 AAA=8 BBB=0 CCC=0 DDD=1.08% XXX=2401"
m = re.search(r"DDD=([^%]+)%", test_str)
ddd = m.group(1) if m else m
print(ddd)    # 1.08

使用字符串查找操作:

my_string="2019-07-25 15:23:13 [Thread-0] DEBUG  - Serial : INFO: QQQ=00000D00001111 AAA=8 BBB=0 CCC=0 DDD=1.08% XXX=2401"
fst = my_string.find("DDD=")
snd = my_string.find("%")
if fst >= 0 and snd >= 0
    print(my_string[fst+4,snd])

產量

1.08

或者您可以使用拆分:

my_string="2019-07-25 15:23:13 [Thread-0] DEBUG  - Serial : INFO: QQQ=00000D00001111 AAA=8 BBB=0 CCC=0 DDD=1.08% XXX=2401"
(fst,snd) = my_string.split("DDD=");
(trd,fourth) = snd.split("%");
print(trd)

產量

1.08
    my_string="2019-07-25 15:23:13 [Thread-0] DEBUG  - Serial : INFO: 
    QQQ=00000D00001111 AAA=8 BBB=0 CCC=0 DDD=1.08% XXX=2401"
    output1 = print(my_string.split("DDD=")[1][:5])
    #output1  =1.08%
    #output2 = print(my_string.split("DDD=")[1][:4])
    #output2  =1.08

暫無
暫無

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

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