文本剥离问题

时间:2017-11-10 13:19:37

标签: python text python-3.5 strip

如果这是PEBKAC问题,请提前道歉,但我无法看到我做错了什么。

Python 3.5.1(FWIW)

我从在线资源中提取数据,该网页的每一行都是\ r \ n等的.strip(),并转换为utf-8字符串。 I' m寻找的线路在下面进一步减少。

我想要两个字符串,加入它们并删除所有非字母数字。

> x = "ABC"
> y = "Some-text as an example."
> z = x+y.lower()

> type z
<class 'str'>

所以这就是问题所在。

> z = z.strip("'-. ")
> print z

结果如何:

ABCsome-text as an example.

而不是,正如我所愿:

ABCsometextasanexample

我可以使用四个.replace()命令来工作,但是条带真的不想在这里工作。我还试过了单独的拆分命令:

> y = y.strip("-")
> print(y)
some-text as an example.

尽管

> y.replace("-", '')
> print(y)
sometext as an example. 

.strip()可能出错的问题有任何疑问?

4 个答案:

答案 0 :(得分:2)

由于您希望删除所有非字母数字字符,因此可以使用以下方法使其更通用:

import re

x = "ABC"
y = "Some-text as an example."
z = x+y.lower()

z = re.sub(r'\W+', '', z)

答案 1 :(得分:1)

Strip不会删除所有字符,它只会删除字符串末尾的字符。

来自the official documentation

  

返回删除了前导和尾随字符的字符串副本。 chars参数是一个字符串,指定要删除的字符集。如果省略或None,则chars参数默认为删除空格。 chars参数不是前缀或后缀;相反,它的所有值组合都被剥离了

答案 2 :(得分:0)

正如其他人所指出的,strip()的问题在于它只对字符串的开头和结尾处的字符进行操作 - 因此多次使用replace()将是实现所需内容的方法只使用字符串方法。

虽然不是你问的问题,但是这里是如何使用re.sub()正则表达式模块中的re函数进行一次调用的方法。要替换的任意字符由字符串变量名chars的内容定义。

import re

x = "ABC"
y = "Some-text as an example."
z = x + y.lower()

print('before: {!r}'.format(z))  # -> before: 'ABCsome-text as an example.'

chars = "'-. "  # Characters to be replaced.
z = re.sub('(' + '|'.join(re.escape(ch) for ch in chars) + ')', '', z)

print('after: {!r}'.format(z))  # -> after: 'ABCsometextasanexample'

答案 3 :(得分:0)

另一个解决方案是使用python的filter():

import re

x = "ABC"
y = "Some-text as an example."
z = x+y.lower()

z = filter(lambda c: c.isalnum(), z)