[英]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
匹配空格字符。因此總體模式匹配所有形式為AA
, 1A
字符串, 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.