簡體   English   中英

如何根據某些條件合並兩個字符串

[英]how to Merge two strings based on some conditions

這是兩個字符串

a=  PVT corner         |    TYP_25    |    SLOW_125 |    SLOW_0_   |    SLOW_40 |    FAST_125 

b= Description         |  RD   |  WR | A   |  RD     |  WR     |  RD     |  WR     |  RD     |  WR     |  RD     |  WR     

我需要檢查“ a”中每個項目的長度,並與“ b”進行比較。 如果有“ |” 如果在“ b”中的項目之間找到它,則必須將其與a的項目並置,例如,“ RD”,“ WR”和“ A”應與a的TYP_25並置。 如何根據此條件合並兩個字符串?

您有一個| 每20個職位角色; 將您的字符串分成20個字符,然后將結果配對:

def by_width(line, width=20, stripchars='|'):
    i = 0
    while i < len(line):
        yield line[i:i+width].strip(stripchars)
        i += width

將結果壓縮在一起可得出:

>>> for column_a, column_b in zip(by_width(a), by_width(b)):
...     print [column_a.strip()] + [v.strip() for v in column_b.split('|')]
... 
['PVT corner', 'Description']
['TYP_25_0P85', 'RD', 'WR', 'A']
['SLOW_125_0P765', 'RD', 'WR']
['SLOW_0_0P765', 'RD', 'WR']
['SLOW_M40_0P765', 'RD', 'WR']
['FAST_125_0P935', 'RD', 'WR']

從那里開始,您可以對列進行所需的操作; 在上面的示例中,我只是將它們放到了空白字符串列表中。

如果格式被確認,我認為可以。

tmp_flag1 = "#"
tmp_flag2 = "|"
tmp_str1 = a.replace(tmp_flag1, "")
tmp_str2 = b.replace(tmp_flag1, "")

tmp_str3 = ""
tmp_pos_head = 0
tmp_pos_tail = 0
tmp_is_equal = False

tmp_ret = tmp_str1.find(tmp_flag2)
while tmp_ret != -1:
        tmp_pos_tail = tmp_ret
        if tmp_str2[tmp_ret] == tmp_flag2:
                tmp_buf1 = tmp_str1[tmp_pos_head:tmp_pos_tail].replace(tmp_flag2, "")
                tmp_buf2 = tmp_str2[tmp_pos_head:tmp_pos_tail].replace(tmp_flag2, "")
                tmp_str3 += tmp_buf1 + ":" + tmp_buf2 + "\n"
                tmp_pos_head = tmp_ret + 1
                tmp_is_equal = True

         tmp_ret = tmp_str1.find(tmp_flag2, tmp_ret + 1)

if tmp_is_equal == True:
        tmp_buf1 = tmp_str1[tmp_pos_tail:].replace(tmp_flag2, "")
        tmp_buf2 = tmp_str2[tmp_pos_tail:].replace(tmp_flag2, "")
else:
        tmp_buf1 = tmp_str1[tmp_pos_head:].replace(tmp_flag2, "")
        tmp_buf2 = tmp_str2[tmp_pos_head:].replace(tmp_flag2, "")
tmp_str3 += tmp_buf1 + ":" + tmp_buf2

print tmp_str3

不管寬度是否相等,都可以使用zip

a = "  PVT corner         |    TYP_25    |    SLOW_125    SLOW_0_   |    SLOW_M40|    FAST_12 "
b = " Description         |  RD   |  WR | A   |  RD     |  WR     |  RD     |  WR     |  RD     |  WR     |  RD     |  WR     "
head = 0
res = []
for i,(s,t) in enumerate(zip(a,b)):
    if (s,t) == ("|","|"):
        res.append([a[head:i].strip()]+[m.strip() for m in b[head:i].split("|")])
        head = i + 1
res.append([a[head:].strip()]+[m.strip() for m in b[head:].split("|")])

for r in res:
    print r

輸出是

['PVT corner', 'Description']
['TYP_25', 'RD', 'WR', 'A']
['SLOW_125', 'RD', 'WR']
['SLOW_0', 'RD', 'WR']
['SLOW_40', 'RD', 'WR']
['FAST_125', 'RD', 'WR']

暫無
暫無

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

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