Python - 在同一个字符串

时间:2017-07-06 07:36:59

标签: python

我想保存一个起点和终点之间的短语。

开头是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]

基本上我想提取数字

4 个答案:

答案 0 :(得分:0)

你可以用空格分割:

>>> 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'

答案 1 :(得分:0)

这是一个简单的正则表达式问题,如果您的数据现在是如何显示的那么您可以使用正则表达式来解决这个问题。

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-z-A-Z。然后{2}意味着我希望字符串恰好是两个字符匹配前一个模式(又名[\d|\w]。最后\s匹配空白字符。所以整体模式匹配表单的所有字符串AA1A11等。请注意,每个后面都有一个空格。

答案 2 :(得分:0)

试试这个。见外观here

if line.startswith('->'):
    start = '-> '  
    end = ':\ '
    end1 = ' [Channel]' 
    x=line.strip(start)
    x=x.strip(end)
    x=x.strip(end1)
    data.append(x)

答案 3 :(得分:0)

<h3>Actions</h3>
<ul>
    <li><a href="#" tabindex="1">Edit</a> <a tabindex="-1" href="#">(Help)</a></li>
    <li><a href="#" tabindex="2">Delete</a> <a tabindex="-1" href="#">(Help)</a></li>
    <li><a href="#" tabindex="3">Back</a></li>
</ul>

<强>输出

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个空格,拆分空格,不保留第一个和最后一个结果,合并其余部分。