如果这是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()
可能出错的问题有任何疑问?
答案 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不会删除所有字符,它只会删除字符串末尾的字符。
返回删除了前导和尾随字符的字符串副本。 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)