-1

给定一个字符串,如下所示,

"[xyx],[abc].[cfd],[abc].[dgr],[abc]"

如何打印如下所示?

1.[xyz]
2.[cfd]
3.[dgr]

原始字符串将始终保持上述格式。

4

5 回答 5

1

我没有意识到你有句号和逗号......这增加了一些诡计。你也必须按期分开

我会用这样的东西......

list_to_parse = "[xyx],[abc].[cfd],[abc].[dgr],[abc]"

count = 0
for  i in list_to_parse.split('.'):
    for j in i.split(','):
        string = str(count + 1) + "." + j
        if string:
            count += 1
            print(string)
        string = None

另一个选项是在左括号上拆分,然后用 enumerate 重新添加它 - 然后去掉逗号和句点 - 这种方法也可能快一点,因为它不是循环内的循环

list_to_parse = "[xyx],[abc].[cfd],[abc].[dgr],[abc]"

for index, i in enumerate(list.split('[')):
    if i:
        print(str(index) + ".[" + i.rstrip(',.'))

也 strip 真的是“要删除的字符”而不是特定的模式。所以你可以添加任何你想从右边删除的字符,它会在列表中工作,直到它碰到一个它不能删除的字符。还有 lstrip() 和 strip()

字符串操作总是很棘手,所以要注意。因为这将输出一个空白的第一个对象,所以不打印索引零等......总是练习和学习你的需求:D

于 2022-01-16T19:36:57.080 回答
1

您可以使用split()功能:

a = "[xyx],[abc].[cfd],[abc].[dgr],[abc]"

desired_strings = [i.split(',')[0] for i in a.split('.')]

for i,string in enumerate(desired_strings):
    print(f"{i+1}.{string}")
于 2022-01-16T19:38:11.710 回答
1

这只是一个有趣的解决方法:

lst = "[xyx],[abc].[cfd],[abc].[dgr],[abc]"

count = 1
var = 1
for char in range(0, len(lst), 6):
    if var % 2:
        print(f"{count}.{lst[char:char + 5]}")
        count += 1
    var += 1

输出:

1.[xyx]
2.[cfd]
3.[dgr]

解释:"["出现在这些索引中:0、6、12等var是为了跳过下一对。count是计数变量。


在这里,我们可以使用列表理解和切片而不是那些标志变量来压缩上面的代码。它现在更像 Pythonic:

lst = "[xyx],[abc].[cfd],[abc].[dgr],[abc]"

lst = [lst[i:i+5] for i in range(0, len(lst), 6)][::2]

res = (f"{i}.{item}" for i, item in enumerate(lst, 1))

print("\n".join(res))
于 2022-01-16T19:42:39.790 回答
0

您可以使用RegEx

import regex as re
pattern=r"(\[[a-zA-Z]*\])\,\[[a-zA-Z]*\]\.?"
results=re.findall(pattern, '[xyx],[abc].[cfd],[abc].[dgr],[abc]')
print(results)
于 2022-01-16T19:39:35.900 回答
0

使用re.findall

import re

s = "[xyx],[abc].[cfd],[abc].[dgr],[abc]"

print('\n'.join(f'{i+1}.{x}' for i,x in
                enumerate(re.findall(r'(\[[^]]+\])(?=,)', s))))

输出:

1.[xyx]
2.[cfd]
3.[dgr]
于 2022-01-16T19:49:16.687 回答