社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

使用Python打印特定字符

PSR • 3 年前 • 1319 次点击  

给定如下所示的字符串,

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

如何按如下所示打印?

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133506
 
1319 次点击  
文章 [ 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