Py学习  »  Python

使用Python打印特定字符

PSR • 3 年前 • 1454 次点击  

给定如下所示的字符串,

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

如何按如下所示打印?

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133506
 
1454 次点击  
文章 [ 5 ]  |  最新文章 3 年前
mozway
Reply   •   1 楼
mozway    3 年前

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]
OnY
Reply   •   2 楼
OnY    3 年前

你可以用 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)
SorousH Bakhtiary
Reply   •   3 楼
SorousH Bakhtiary    3 年前

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

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 是计数变量。


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

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))
Mohammad Khoshbin
Reply   •   4 楼
Mohammad Khoshbin    3 年前

你可以用 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}")
Robert Cotterman
Reply   •   5 楼
Robert Cotterman    3 年前

我不知道你有句号和逗号。。。这增加了一点诡计。你也必须在月经上分开

我会用这样的东西。。。

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()

字符串操作总是很棘手,所以请注意。因为这将输出一个空白的第一个对象,所以索引0不会被打印等等。。。始终练习并了解自己的需求:D