鱼C论坛

 找回密码
 立即注册
查看: 2229|回复: 23

[已解决]字符串的美化 (题目类型:Python字符串与正则表达式)

[复制链接]
发表于 2020-5-21 09:09:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 欧德奈瑞 于 2020-5-21 19:19 编辑

7-1 字符串的美化
输入一行以空格作为分隔符的任意字符串,对其按下列要求处理后输出:

1、删除所有的数字字符
2、删除单词中的破折号-
3、删除以@和#字符开头的单词
4、删除单词尾部有三个点的省略号(...)
输入格式:
输入非空的字符串。

输出格式:
输出处理后的字符串

输入样例:
在这里给出一组输入。例如:
#1: welcome @tom to the2 Basic-building...
输出样例:
在这里给出相应的输出。例如:
welcome to the Basicbuilding
最佳答案
2020-5-21 09:35:22
本帖最后由 sunrise085 于 2020-5-21 09:41 编辑
def clear_word(str1):
    list1=str1.split()   # 先按照空格拆分成单词
    for i in range(len(list1)-1,-1,-1):  # 遍历所有单词,逆序遍历,因为可能会删除某个单词从而改变后面单词的下标值
        if list1[i][0]=='@' or list1[i][0]=='#':  # 若单词以@或者#开头,则删除该单词
            list1.pop(i)
        else:      # 否则按照规则处理单词,下面这三种不分先后,可以换顺序
            for j in range(10):   # 先清除单词中的数字
                list1[i]="".join(list1[i].split(str(j)))
            list1[i]="".join(list1[i].split('-'))  # 再清除单词中的破折号
            list1[i]=list1[i].rstrip('...')     # 最后再清除结尾的省略号
    return ' '.join(list1) # 把单词还原成字符串并返回
    
str1=input()
print(clear_word(str1))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-21 09:12:07 | 显示全部楼层
骚等~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-21 09:14:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-21 09:24:37 | 显示全部楼层
old_str = input('请输入需要美化的字符串:')
new_str = ''
for i in old_str:
    if i.isdigit() or i == '-': # 判断是否是数字 或 破折号
        continue
    new_str += i
cut_str = new_str.split(' ')

for i in cut_str:
    if i[0] == '@' or i[0] == '#':
        cut_str.remove(i)
    if  i[-3:] == '...':
        temp = i[:-3]
        cut_str.insert(cut_str.index(i),temp)
        cut_str.remove(i)


new_str = ' '.join(cut_str)
print(new_str)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-21 09:35:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-5-21 09:41 编辑
def clear_word(str1):
    list1=str1.split()   # 先按照空格拆分成单词
    for i in range(len(list1)-1,-1,-1):  # 遍历所有单词,逆序遍历,因为可能会删除某个单词从而改变后面单词的下标值
        if list1[i][0]=='@' or list1[i][0]=='#':  # 若单词以@或者#开头,则删除该单词
            list1.pop(i)
        else:      # 否则按照规则处理单词,下面这三种不分先后,可以换顺序
            for j in range(10):   # 先清除单词中的数字
                list1[i]="".join(list1[i].split(str(j)))
            list1[i]="".join(list1[i].split('-'))  # 再清除单词中的破折号
            list1[i]=list1[i].rstrip('...')     # 最后再清除结尾的省略号
    return ' '.join(list1) # 把单词还原成字符串并返回
    
str1=input()
print(clear_word(str1))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-5-21 09:37:10 | 显示全部楼层

大佬,你的代码感觉特别棒,完全能过已给的样例。就是我的测试点没有全过,隐藏起来的另外两个样例(我也不知道是什么)显示“非零返回”。难道是没用正则表达式?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-21 09:38:37 | 显示全部楼层
欧德奈瑞 发表于 2020-5-21 09:37
大佬,你的代码感觉特别棒,完全能过已给的样例。就是我的测试点没有全过,隐藏起来的另外两个样例(我也 ...

嗷嗷哦 等等我在改改 我美发现是使用正则
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-5-21 09:39:06 | 显示全部楼层

大佬,结果错误呀。显示
['#1:', 'welcome', '@tom', 'to', 'the2', 'Basic-building...']
#1: welcome to the Basicbuilding
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-21 09:39:51 | 显示全部楼层
Twilight6 发表于 2020-5-21 09:38
嗷嗷哦 等等我在改改 我美发现是使用正则

静候佳音
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-21 09:42:30 | 显示全部楼层
欧德奈瑞 发表于 2020-5-21 09:39
大佬,结果错误呀。显示
['#1:', 'welcome', '@tom', 'to', 'the2', 'Basic-building...']
#1: welcome ...

我刚刚加了一下注释,你再试一下,我这里没问题啊。
难道之前复制粘贴的时候有错误的地方?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-5-21 09:44:12 | 显示全部楼层
sunrise085 发表于 2020-5-21 09:42
我刚刚加了一下注释,你再试一下,我这里没问题啊。
难道之前复制粘贴的时候有错误的地方?

嗯,我这也能过我给的样本1。但是就是不知道题目被隐藏了什么另外的两个样本,测试第二个样本的时候显示“格式错误”。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-21 09:45:44 | 显示全部楼层
欧德奈瑞 发表于 2020-5-21 09:44
嗯,我这也能过我给的样本1。但是就是不知道题目被隐藏了什么另外的两个样本,测试第二个样本的时候显示 ...

其他样本是啥?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-5-21 09:47:16 | 显示全部楼层

额, 大佬,我这也没显示其他样本,我也不知道。可能是这题希望使用正则表达式解决吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-21 10:08:06 | 显示全部楼层

大佬!我把您的代码输出修改成print(clear_word(str1).lstrip())之后就通过了!非常感谢你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-21 10:09:40 | 显示全部楼层

虽然大佬您的代码在我这道题目不知道哪里出了问题,但是还是非常感谢你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-21 10:10:16 | 显示全部楼层
欧德奈瑞 发表于 2020-5-21 10:09
虽然大佬您的代码在我这道题目不知道哪里出了问题,但是还是非常感谢你!
import re
string = """#1: welcome @tom to the2 Basic-building..."""

string = re.sub(r'[0-9]','',string)
print(string)
string = re.sub(r'-','',string)
print(string)
cut_string = string.split(' ')
print(cut_string)
for i in cut_string:
    if i[0] == '#' or i[0] == '@':
        cut_string.remove(i)
    if i[-3:] == '...':
        temp = i[:-3]
        cut_string.insert(cut_string.index(i),temp)
        cut_string.remove(i)
string = ' '.join(cut_string)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-21 10:10:49 | 显示全部楼层
欧德奈瑞 发表于 2020-5-21 10:09
虽然大佬您的代码在我这道题目不知道哪里出了问题,但是还是非常感谢你!


。。。你要求的是使用正则啊,刚刚写好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-21 14:09:21 | 显示全部楼层


正则表达式应该是这样的。
你的程序有的是用正则去掉的有的则不是用正则去掉的。。。
import re
def clear_word(string):
    string = re.sub(r'[\d\-]','',string) # 去掉数字和破折号
    string = re.sub(r'\.{3}\B','',string)  # 去掉单词末尾的...
    string = re.sub(r'\B(@|#)[^\s]*(\s)?','',string)  # 去掉以#或@开头的单词
    return string
string = input()
print(clear_word(string))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-21 14:15:34 | 显示全部楼层
sunrise085 发表于 2020-5-21 14:09
正则表达式应该是这样的。
你的程序有的是用正则去掉的有的则不是用正则去掉的。。。

emmm 这个我知道,而你上面的全部不是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-21 14:35:04 | 显示全部楼层
Twilight6 发表于 2020-5-21 14:15
emmm 这个我知道,而你上面的全部不是

因为我之前也没看到要用正则表达式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-21 00:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表