首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能用python中的正则表达式替换目标字符串?

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

Stack Overflow用户
提问于 2014-04-02 01:17:22
回答 3查看 380关注 0票数 0

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

代码语言:javascript
复制
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元(含税)作为结果?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-02 01:24:11

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

有两个合理的解决办法:

  1. 您可以坚持使用字符串替换,只需使用正确的语法(但请注意,这将替换所有选项卡,而不仅仅是换行符后面的选项卡): str2 =str1.place(“\n”,"") .replace(“t”,“”)
  2. 您可以导入re模块并进行预期的替换: 导入re str2 = re.sub(r"\n\t+","",str1)
票数 3
EN

Stack Overflow用户

发布于 2014-04-02 01:22:11

您的主要原因是因为str2正在寻找'\n\t+',这在语句中是找不到的。而且,您的理想输出不会是这样的,因为它希望删除所有的\n\t,但是您的replace()只查找那些直接出现在\n之后的输出。试试下面的代码:

代码语言:javascript
复制
>>> 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
EN

Stack Overflow用户

发布于 2014-04-02 01:33:21

你可以

代码语言:javascript
复制
str2 = ''.join(s.strip() for s in str1.splitlines())

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22799809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档