9

我正在尝试学习python,而且我对它很陌生,我无法弄清楚这一部分。基本上,我现在所做的就是把网页的源代码取出来,把所有不是文字的东西都拿出来。

网页有很多 \n 和 \t,我想要一些可以找到 \ 并删除它与下一个 ' ' 之间的所有内容的东西。

def removebackslash(source):
    while(source.find('\') != -1):
        startback = source.find('\')
        endback = source[startback:].find(' ') + startback + 1
        source = source[0:startback] + source[endback:]
    return source

是我所拥有的。它不是这样工作的,因为\'不会关闭字符串,但是当我更改\为时\\,它会将字符串解释为\\. 我无法弄清楚任何被解释为'\'

4

5 回答 5

18

\是转义字符;它要么赋予字符特殊的含义,要么带走所说的特殊含义。现在,它正在转义结束单引号并将其视为文字单引号。您需要自行转义它以插入文字反斜杠:

def removebackslash(source):
    while(source.find('\\') != -1):
        startback = source.find('\\')
        endback = source[startback:].find(' ') + startback + 1
        source = source[0:startback] + source[endback:]
    return source
于 2012-06-07T19:06:50.237 回答
7

尝试使用替换:

str.replace(old, new[, count])

返回字符串的副本,其中所有出现的子字符串 old 都替换为 new。如果给定了可选参数 count,则仅替换第一个 count 出现。

所以在你的情况下:

my_text = my_text.replace('\n', '')
my_text = my_text.replace('\t', '')
于 2012-06-07T19:09:08.823 回答
3

正如其他人所说,您需要使用'\\'. 您认为这不起作用的原因是,当您获得结果时,它们看起来像是以两个反斜杠开头。但是它们不是以两个反斜杠开头的,只是 Python显示了两个反斜杠。如果没有,您将无法区分换行符(表示为\n)和反斜杠后跟字母 n(表示为\\n)之间的区别。

有两种方法可以让自己相信真正发生的事情。一种是在结果上使用 print ,这会导致它扩展转义:

>>> x = "here is a backslash \\ and here comes a newline \n this is on the next line"
>>> x
u'here is a backslash \\ and here comes a newline \n this is on the next line'
>>> print x
here is a backslash \ and here comes a newline 
 this is on the next line
>>> startback = x.find('\\')
>>> x[startback:]
u'\\ and here comes a newline \n this is on the next line'
>>> print x[startback:]
\ and here comes a newline 
 this is on the next line

另一种方法是使用len来验证字符串的长度:

>>> x = "Backslash \\ !"
>>> startback = x.find('\\')
>>> x[startback:]
u'\\ !'
>>> print x[startback:]
\ !
>>> len(x[startback:])
3

注意len(x[startback:])是 3。字符串包含三个字符:反斜杠、空格和感叹号。只需查看仅包含反斜杠的字符串,您就可以更简单地了解发生了什么:

>>> x = "\\"
>>> x
u'\\'
>>> print x
\
>>> len(x)
1

x__repr__当您在交互式提示下评估它时(或以其他方式使用它的方法),它看起来只是以两个反斜杠开头。当你实际打印时,你可以看到它只有一个反斜杠,当你查看它的长度时,你可以看到它只有一个字符长。

所以这意味着您需要转义 中的反斜杠find,并且您需要认识到输出中显示的反斜杠也可能加倍。

于 2012-06-07T19:43:36.417 回答
2

SO 自动格式显示您的问题。由于\用于转义字符,因此它转义了结束引号。尝试将该行更改为(注意使用双引号):

while(source.find("\\") != -1):

在文档中阅读有关转义字符的更多信息。

于 2012-06-07T19:07:20.320 回答
2

我认为还没有人提到这一点,但是如果您不想处理必须转义字符的问题,只需使用原始字符串即可。

source.find(r'\')

在字符串之前添加字母r告诉 Python 不要解释任何特殊字符并保持字符串与您键入的完全相同。

于 2012-06-08T02:04:24.790 回答