繁体   English   中英

如何从字符串中删除斜杠、字母和数字?

[英]How to remove slash, letters and numbers from a string?

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

但是,当前输出是['课程编号: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)

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

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

这通常是我删除特殊字符/格式的首选方法 - 但它是如何工作的......如果我们查看第一组引号'[^A-Za-z0-9-|:]+'我们会看到我们声明的第一件事是AZ ,它仅表示从 A 到 Z 全部为大写字母。 然后我们从az all 得到小写。 之后我们有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-|:_]+'希望这会有所帮助。 要阅读更多信息,请转到 python3 文档的正则表达式 how to 部分

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM