簡體   English   中英

Python-在同一字符串中的一點或另一點處剝線

[英]Python - Strip line at either one point or another in the same string

我想保存一個介於起點和終點之間的短語。

開始是start = '->' 問題在於它可以有兩個不同的端點(取決於我得到的字符串) end = ':\\'end1 ='[Channel]

因此,我試圖在同一循環中在兩端的字符串':\\''[channel]'進行拆分。 我嘗試使用or, split, strip, striplines和其他方法,但是沒有任何竅門

我的代碼現在看起來如何(不起作用)

        if line.startswith('->'):
                start = '-> '  # take string from
                end = ':\ ' #either end at this character
                end1 = '[Channel]' # or this character
                data.append(line[line.find(start) + 3:line.find(end or end1)].strip()) 

帶有字符串的文件的外觀示例

SEND TEST:
-> 3C 53 25 25 :\TCM_APP_33\MO\NO
-> 32 12 H2 3G [Channel]
-> 43 34 52 4B [Channel]
-> 4C 33 45 24 [Channel]
SEND TEST:
-> 35 32 5V 25 :\ KCM_APP_31\TEST\FIX
-> 3N 21 24 23 [Channel]
SEND TEST:
-> 12 3F 56 7D :\BCM_APP_31\TRY
-> 3N 21 24 23 [Channel]

基本上我想提取數字

您可以用空格分開:

>>> s = "-> 4334524 [Channel]"
>>> data = s.split()
>>> data
[u'->', u'4334524', u'[Channel]']
>>> data[1]
u'4334524'

編輯:

>>> l = "-> 32 12 H2 3G [Channel]"
>>> str("".join(l.split()[1:5]))
'3212H23G'

如果您的數據現在已經顯示出來,那么這是一個簡單的正則表達式問題,那么您可以使用正則表達式很簡單地解決此問題。

import re

numbers = re.compile("[\d|\w]{2}\s")
just_numbers = []
for line in data:
    just_numbers.append(" ".join([x.strip() for x in numbers.findall(line)]))

print(just_numbers)

產量

['12 3F 56 7D', '3C 53 25 25', '32 12 H2 3G']

[\\d|\\w]{2}\\s[\\d|\\w]匹配字母或數字字符,因此0-9a-zAZ 然后{2}表示我希望字符串恰好是與先前模式匹配的兩個字符(又名[\\d|\\w] 。最后\\s匹配空格字符。因此總體模式匹配所有形式為AA1A字符串, 11等。請注意,每一個之后都有一個空格。

嘗試這個。 看到這里放出來

if line.startswith('->'):
    start = '-> '  
    end = ':\ '
    end1 = ' [Channel]' 
    x=line.strip(start)
    x=x.strip(end)
    x=x.strip(end1)
    data.append(x)
data="""
-> 123456 :\\
123 123
other data ...
-> 12 3F 56 7D :\\
-> 3C 53 25 25 :\\
-> 32 12 H2 3G [Channel]
-> 43 34 52 4B [Channel]
-> 4C 33 45 24 [Channel]
-> 35 32 5V 25 :\\
-> 3N 21 24 23 [Channel]
other data ...
123 123
-> hello [Channel]"""


numbers= [''.join(_.split()[1:-1]) for _ in data.split("\n") if _.startswith('->') and _.count(' ') == 5]
print (numbers)

產量

['123F567D', '3C532525', '3212H23G', '4334524B', '4C334524', '35325V25', '3N212423']

拆分所有行,僅保留以->開頭的行,並保留5個空格,拆分空格,不保留第一個和最后一個結果,合並其余的行。

暫無
暫無

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

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