为什么我不能用python中的正则表达式替换目标字符串?

时间:2014-04-02 01:17:22

标签: python

我想替换字符串\n\t+中的"2005-03-08\n\t\t\t\t\t10派3元(含税)\n\t\t\t\t\t",为什么我不能让它工作?

str1="2005-03-08\n\t\t\t\t\t10派3元(含税)\n\t\t\t\t\t"
str2=str1.replace("\n\t+","")
str2
'2005-03-08\n\t\t\t\t\t10派3元(含税)\n\t\t\t\t\t'

为什么我无法获得2005-03-0810派3元(含税)作为结果?

3 个答案:

答案 0 :(得分:3)

您的代码没有进行正则表达式替换,而是尝试(不成功)使用内置的str.replace方法。这不起作用,因为语义不对。

有两个合理的解决方法:

  1. 您可以坚持使用字符串替换,只需使用正确的语法(但请注意,这将替换所有选项卡,而不仅仅是替换换行符的选项卡):

    str2 = str1.replace("\n", "").replace("\t", "")
    
  2. 您可以导入re模块并进行预期的替换:

    import re
    str2 = re.sub(r"\n\t+", "", str1)
    

答案 1 :(得分:2)

那么你的主要原因是因为str2正在寻找'\n\t+',这在声明中找不到。而且,您理想的输出将不会是这样,因为它正在寻找删除\n\t所有,但您的replace()只查找直接来的在\n之后。试试这段代码:

>>> str1="2005-03-08\n\t\t\t\t\t10派3元(含税)\n\t\t\t\t\t"
>>> ideal = "2005-03-0810派3元(含税)" #Just to check if they are the same
>>> str2 = str1.replace('\n', '').replace('\t', '')
>>> str2
'2005-03-0810\xe6\xb4\xbe3\xe5\x85\x83(\xe5\x90\xab\xe7\xa8\x8e)' #The encoded statement
>>> print str2
2005-03-0810派3元(含税)
>>> str2==ideal
True
>>> 

答案 2 :(得分:0)

你可以做到

str2 = ''.join(s.strip() for s in str1.splitlines())

(虽然这也会删除前导和尾随空格)。