如何在 Python 中用“”替换我的自定义字符?
Posted
技术标签:
【中文标题】如何在 Python 中用“”替换我的自定义字符?【英文标题】:How to replace my customized characters with ' ' in Python? 【发布时间】:2019-12-14 13:53:36 【问题描述】:我正在尝试用“”替换我自己的自定义字符。以下是我感到困惑的地方:
如果我只替换一个字符就可以了:
a=pd.DataFrame('title':['a/b','a # b','a+b'])
a.loc[:,'title1']=a.loc[:,'title'].astype(str).str.replace('/',' ')
a
结果是:
title title1
0 a/b a b
1 a # b a # b
2 a+b a+b
如果我使用包含一些字符的短字符串,也可以:
b2='[?|:|-|\'|\\|/]'
a=pd.DataFrame('title':['a/b','a # b','a+b'])
a.loc[:,'title1']=a.loc[:,'title'].astype(str).str.replace(b2,' ')
a
结果是:
title title1
0 a/b a b
1 a # b a # b
2 a+b a+b
但是,当我尝试使用长字符串来执行此操作时,没有任何变化:
b1='[?|:|-|\'|\\|.|(|)|[|]|||/]'
a=pd.DataFrame('title':['a/b','a # b','a+b'])
a.loc[:,'title1']=a.loc[:,'title'].astype(str).str.replace(b1,' ')
a
结果是:
title title1
0 a/b a/b
1 a # b a # b
2 a+b a+b
您可以看到,在前两个示例中, / 被替换为 ' '。但是在最后一个中,替换没有发生,我不知道为什么?这是因为字符串有限制吗?或者,有没有更好的方法我不知道?
更新
非常感谢@Oliver Hao。但是我要对数据框中的一个(或多个)列执行此操作,然后将结果作为新列保存回数据框。所以当我尝试时:
regex = r"[?:\-'\\\|.()\[\]/]"
a.loc[:,'title1']=re.sub(regex," ",a.loc[:,'title'],0,re.MULTILINE)
我得到了错误:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Users\fefechen\AppData\Local\Programs\Python\Python37\lib\re.py", line 192, in sub
return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or bytes-like object
【问题讨论】:
我没用过python。可以看看是不是python版本,因为我给的测试代码是2.x,而你用的是3.x。 Look at this . 【参考方案1】:这个表达式也可能有效,
b1="[|,.:;+–_#&@!$%()[\]?'\"\/\\-]"
转义次数更少。
【讨论】:
【参考方案2】:更新为:b1='[?:\-\'\\\|.()\[\]/]'
regex demo
代码:
# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"[?:\-'\\\|.()\[\]/]"
test_str = "'a/b','a # b','a+b'"
subst = " "
# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)
if result:
print (result)
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
【讨论】:
嗨,非常感谢。但我需要将结果作为新列保存回数据框中。所以它与你的答案不同。我不知道如何修改它。你能看看我上面编辑过的问题吗?谢谢【参考方案3】:我自己找到了答案。最后一个不起作用,因为我应该这样做:
b1="[?|:|\-|\–|\'|\\|.|\(|\)|\[|\]|\|\|/|#|+|,|;|_|\"|&|@|!|$|%|\|]"
把\放在一些特殊字符的前面。
【讨论】:
字符类中字符之间的管道没有用。以上是关于如何在 Python 中用“”替换我的自定义字符?的主要内容,如果未能解决你的问题,请参考以下文章