我试图获得一个清晰美观的字符串表示形式。我想要的版本是['课程号: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)
答案 0 :(得分:0)
正如@melpomene所说,字符串'\ xa0'是一个字符-一个不间断的空格...您真正需要对该字符串进行的操作是通过使用来将其重新格式化为所谓的'原始文本'。 regex:
import re
re.sub('[^A-Za-z0-9-|:]+', ' ', str)
通常,这是我首选的去除特殊字符/格式的方法-但是它是如何工作的...如果我们用第一组引号'[^A-Za-z0-9-|:]+'
来看,我们看到的第一件事是{{1 }}仅表示从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-|:
希望这会有所帮助。要了解更多信息,请访问python3文档的regex how to section。