如何在 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 中用“”替换我的自定义字符?的主要内容,如果未能解决你的问题,请参考以下文章

IO流自定义字符数组的拷贝。

Linux内核开发——自定义字符设备

需要一些关于自定义字符表的帮助和提示

Linux内核开发——自定义字符设备

java:打印菱形图案(传参打印的自定义字符和行数)

R语言str_flatten函数通过自定义字符连接(concatenate)字符串向量中的字符串