这是我到目前为止的代码:
dex = tree.xpath('//div[@class="cd-timeline-topic"]/text()')
names = filter(lambda n: n.strip(), dex)
table = str.maketrans(dict.fromkeys('?:,'))
for index, name in enumerate(dex, start = 0):
print('{}.{}'.format(index, name.strip().translate(table)))
问题是输出将打印一个特殊字符“我的名字是/理查德”的字符串。所以我需要的是用空格替换那个特殊字符,最后打印输出将是“我的名字是理查德”。谁能帮我 ?
谢谢!
你对dict.fromkeys()
的调用在其论证中不包括字符/
。
如果你想将所有特殊字符映射到None
,只需将特殊字符列表传递给dict.fromkeys()
即可。如果你想用空格替换它们,你可以遍历dict并为每个键设置值为。
例如:
special_chars = "?:/"
special_char_dict = dict.fromkeys(special_chars)
for k in special_char_dict:
special_char_dict[k] = " "
您可以通过扩展转换表来完成此操作:
dex = ["My Name is/Richard????::,"]
table = str.maketrans({'?':None,':':None,',':None,'/':' '})
for index, name in enumerate(dex, start = 0):
print('{}.{}'.format(index, name.strip().translate(table)))
OUTPUT
0.My Name is Richard
你想用None
替换大多数特殊字符但是用空格替换正斜杠。您可以使用其他方法替换正斜杠,如此处的其他答案,或者您可以如上所述扩展您的转换表,将所有其他特殊字符映射到None
并将斜杠转换为空格。有了这个,你可以为不同的角色发生一大堆不同的替换。
或者你可以使用re.sub
函数:
import re
s = 'Te/st st?ri:ng,'
out = re.sub(r'\?|:|,|/',lambda x:' ' if x.group(0)=='/' else '',s)
print(out) #Te st string
re.sub
的参数含义如下:第一个是模式 - 它通知re.sub
要替换的子串,?
需要被转义,否则它具有特殊意义,|
意味着:或者,所以re.sub
将寻找?
或:
或,
或/
。第二个参数是返回用于代替原始子串的字符的函数:/
的空间和其他任何东西的空str
。第三个参数是要更改的字符串。
>>> a = "My name is/Richard"
>>> a.replace('/', ' ')
'My name is Richard'
要从字符串中替换任何字符或字符序列,您需要使用`.replace()'方法。所以你的答案的解决方案是:
name.replace("/", " ")