【发布时间】:2022-10-17 13:06:06
【问题描述】:
我有一个字符串列表“1. AGGCHRUSHCCKSGDSKCGGHCSG” 我想在我的字符串中获取所有“G”并打印这样的模式: GG-G-GG-G
如果我的字符串中没有 Gs,它应该打印“No G found”。
我已经在 python 中尝试了基本的字符串、子字符串和打印,但这就是我所得到的。我也找不到这个的 Excel 公式。我怎样才能生成这种模式?
【问题讨论】:
标签: python
我有一个字符串列表“1. AGGCHRUSHCCKSGDSKCGGHCSG” 我想在我的字符串中获取所有“G”并打印这样的模式: GG-G-GG-G
如果我的字符串中没有 Gs,它应该打印“No G found”。
我已经在 python 中尝试了基本的字符串、子字符串和打印,但这就是我所得到的。我也找不到这个的 Excel 公式。我怎样才能生成这种模式?
【问题讨论】:
标签: python
您可以使用正则表达式将一个或多个非“G”字符序列替换为单个破折号,然后使用 .strip() 删除任何前导或尾随破折号:
import re
data = "1. AGGCHRUSHCCKSGDSKCGGHCSG"
result = re.sub(r"[^G]+", r"-", data).strip("-")
if "G" in result:
print(result)
else:
print("No G found")
这输出:
GG-G-GG-G
【讨论】:
编辑-@PranavHosangadi 的建议:
from itertools import groupby
string = "1. AGGCHRUSHCCKSGDSKCGGHCSG"
groups = ("".join(group) for key, group in groupby(string) if key == "G")
print("-".join(groups))
输出:
GG-G-GG-G
>>>
【讨论】:
groups 时加入每个组中的字母以及用生成器表达式替换该列表推导来提高此代码的效率。 groups = ("".join(group) for key, group in groupby(string) if key == "G"); "-".join(groups)
string1= "1. AGGCHRUSHCCKSGDSKCGGHCSG"
string2=""
for char in string1:
if char=='G':
string2+=char
else:
string2+='-'
print(string2)
像这样?
【讨论】: