首页 > 解决方案 > 如何从字符串中删除斜线、字母和数字?

问题描述

我试图获得一个漂亮而干净的字符串表示。我想要的版本是 ['Course Number: CLASSIC 10A | 课程名称:希腊文明概论1 | 课程单元:4']

但是,当前的输出是 ['Course Number: CLASSIC\xa010A | 课程名称:希腊文明概论1 | 课程单元:4']。

有东西 (\xa) 妨碍了第一个元素。我将附上下面的代码部分。提前感谢您帮助我。

all_tds = [get_tds(scrollable) for scrollable in scrollables]
def num_name_unit(list, index):
    all_rows = []
    num = list[index][0].get_text(strip=True)
    name = str.isalnum, list[index][1].get_text(strip=True)
    unit = list[index][2].get_text(strip=True)
    all_rows += [('Course Number: {0} | Course Name: {1} | Course Unit: {2}'.format(num, name, unit)]
    return all_rows
c = num_name_unit(all_tds[0], all_tds.index(all_tds[0]))
print(c)

标签: pythonstring

解决方案


正如@melpomene 评论的那样,字符串 '\xa0' 是一个字符 - 一个不间断的空格......你真正需要对这个字符串做的是通过使用regex将其重新格式化为所谓的'原始文本' :

import re
re.sub('[^A-Za-z0-9-|:]+', ' ', str)

这通常是我删除特殊字符/格式的首选方式 - 但它是如何工作的......如果我们查看第一组引号,'[^A-Za-z0-9-|:]+'我们会看到我们声明的第一件事就是A-Z从 A 到 Z 全部用大写字母表示. 然后我们从a-z所有小写字母中获取。之后,我们得到0-9了显示从 0 到 9 的所有值,最后我们得到|:了表示任何冒号或管道...让我们用一个简单的脚本来测试它:

import re
vals = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789|:'
print(vals == re.sub('[^A-Za-z0-9-|:]+', ' ', vals))

我建议您自己运行此代码进行尝试,但您得到的答案是True.

将其合并到您的脚本中将非常简单:

import re
all_tds = [get_tds(scrollable) for scrollable in scrollables]
def num_name_unit(list, index):
    all_rows = []
    num = list[index][0].get_text(strip=True)
    name = str.isalnum, list[index][1].get_text(strip=True)
    unit = list[index][2].get_text(strip=True)
    all_rows += [('Course Number: {0} | Course Name: {1} | Course Unit: {2}'.format(num, name, unit)]
    return all_rows
c = num_name_unit(all_tds[0], all_tds.index(all_tds[0]))
print(re.sub('[^A-Za-z0-9-|:]+', ' ', c))

如果您遇到希望包含在字符串中的任何其他值,只需将它们添加到^A-Za-z0-9-|:. 例如,如果您也希望保留下划线,您只需使用'[^A-Za-z0-9-|:_]+' Hope this help。要阅读更多内容,请转到 python3 文档的regex how to 部分


推荐阅读