簡體   English   中英

查找文本列表中的第 n 個字符

[英]Finding the nth character in a list of text

    import re

    text = "~SR1*abcde*1234*~end~SR*abcdef*123*~end~SR11*abc*12345*~end"

我有一個本質上是重復的文本。 它以“~SR”開頭,以“end”結尾。 我想從每次重復中找到第 1、第 2 和第 3 個“*”(星號)的索引。

    def start_point(p1):
        segment_start_array = []
        for match in re.finditer(p1, text):
            index = match.start()
            segment_start_array.append(index)
        return segment_start_array


    def point_a(p1):
        a = start_point(p1)
        return a


    def point_b(p2):
        b = start_point(p2)
        return b


    def get_var_section(p1, p2):
        var_list = []
        for each in range(len(start_point(p1))):
            list = text[point_a(p1)[each]:point_b(p2)[each]]
            var_list.append(list)
        return var_list


    print(get_var_section('~SR', '~end'))

==> 結果: ['~SR1*finda*1234*', '~SR*Findab*123*', '~SR11*findabc*12345*']

我首先做的是將重復放入一個列表中,結果為三個元素。 通過這樣做,我認為可以更容易地找到每個星號的位置,但是當我試圖找到第一個和第二個星號的索引時,結果是一樣的。

    def test(p1, p2, occurrence):
        var_list4 = []
        for i in get_var_section(p1, p2):
            x = i.find('*', occurrence)
            var_list4.append(x)
        return var_list4


    print(test('~SR', '~end', 1))
    print(test('~SR', '~end', 2))

==> 結果: [4, 3, 5]
==> 結果: [4, 3, 5]
我不明白為什么在我更改以找到第二次出現的位置后結果沒有改變。

正如您提到的字符串以(~SR1, ~end)開頭和結尾,我用~end拆分字符串,然后使用item循環遍歷列表以查找item索引。

import re

text = "~SR1*abcde*1234*~end~SR*abcdef*123*~end~SR11*abc*12345*~end"
text_list = text.split('~end')
index = []
for item in text_list:
    #print(item)
    if len(item) > 0:
        ind = [i for i, val in enumerate(item) if val == '*']
        #print(ind)
        index.append(ind)
index_new = np.array(index).T.tolist() #transpose of list of lists

結果

print("index") 

[[4, 10, 15], [3, 10, 14], [5, 9, 15]]

print("index_new") 

[[4, 3, 5], [10, 10, 9], [15, 14, 15]]

暫無
暫無

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

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