如何从字符串中删除垂直线

时间:2014-04-19 13:03:02

标签: python beautifulsoup

出于某种原因,我无法从字符串中删除垂直条。此字符串是从html标记(BeautifulSoup 4)中提取的。

该字符串来自网站的标题元标记。

示例输入:'如何快速运行| running.com“
通过if语句,字符串仍然包含|,但它没有在名称中检测到,也从不输入if语句......

name = title.text.encode('ascii', 'ignore').strip()

#remove everything after | because often it is SEO stuff
name = re.sub('\|', '',  name)  #fails
if "|" in name:
    lineIndex = name.index('|')
    name = name[:lineIndex]

4 个答案:

答案 0 :(得分:2)

您需要将正则表达式视为原始字符串:

s = 'How to run very fast | running.com'
s = re.sub(r'\|', '',  s)

>>> print s
How to run very fast  running.com

演示:http://repl.it/R8m

答案 1 :(得分:2)

如果您尝试删除“|”后的所有内容,则应更改正则表达式。

x = 'Blah | blah'
x = re.sub('\|.*', '', x)

>>> print x
'Blah '

答案 2 :(得分:1)

您可以使用translate()方法进行此操作。

  

删除deletechars中的所有字符(如果存在),和   然后使用表格翻译字符,表格必须是   256个字符的字符串,为每个字符值提供翻译,   由其序数索引。如果table为None,则只有字符   执行删除步骤。

示例:

s = 'How to run very fast | running.com'

print s

s = s.translate(None, '|')

print s

输出:

How to run very fast | running.com
How to run very fast  running.com

或使用replace方法:

foo = 'How to run very fast | running.com'

bar = foo.replace("|", "")

print foo
print bar

输出:

How to run very fast | running.com
How to run very fast  running.com

答案 3 :(得分:1)

在第一个之前获取所有内容发生应该有效:

name = name.split('|')[0]

如果还想丢弃尾随和前导空格:

name = name.strip()

(注意,即使名字不在名称中也会有效)