使用 Python 打印特定字符
specific characters printing with Python
给定一个字符串,如下所示,
"[xyx],[abc].[cfd],[abc].[dgr],[abc]"
如何打印如下所示?
1.[xyz]
2.[cfd]
3.[dgr]
原始字符串将始终保持上述格式。
我没有意识到你有句点和逗号...这增加了一点诡计。你也必须分期
我会用这样的东西...
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
另一个选项在左括号中拆分,然后用枚举重新添加它 - 然后去掉逗号和句点 - 这种方法也可能快一点,因为它不是循环中的循环
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
您可以使用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}")
您可以使用 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)
这只是一个有趣的解决方法:
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))
使用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]
给定一个字符串,如下所示,
"[xyx],[abc].[cfd],[abc].[dgr],[abc]"
如何打印如下所示?
1.[xyz]
2.[cfd]
3.[dgr]
原始字符串将始终保持上述格式。
我没有意识到你有句点和逗号...这增加了一点诡计。你也必须分期
我会用这样的东西...
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
另一个选项在左括号中拆分,然后用枚举重新添加它 - 然后去掉逗号和句点 - 这种方法也可能快一点,因为它不是循环中的循环
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
您可以使用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}")
您可以使用 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)
这只是一个有趣的解决方法:
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))
使用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]