python .replace()正则表达式

use*_*957 188 python regex

我试图在"</ html>"标记之后抓取所有内容并将其删除,但我的代码似乎没有做任何事情.难道.replace()不支持正则表达式?

z.write(article.replace('</html>.+', '</html>'))
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 281

否.Python中的正则表达式由re模块处理.

article = re.sub(r'(?is)</html>.+', '</html>', article)
Run Code Online (Sandbox Code Playgroud)

  • `re.replace(regex_search,regex_replace,内容)` (56认同)
  • 应该是`re.sub(regex_search,regex_replace,contents)` (12认同)
  • 更多信息对初学者来说会更好 (5认同)
  • 标签不是小写,还是后面跟着一个“\n”?你可以让它不区分大小写(`(?i)` 标志)并使`.` 匹配换行符(`(?s)` 标志)和`r'(?is)&lt;/html&gt;.+'`。 (3认同)
  • 使用标志会更具可读性,即添加 flags=re.DOTALL | re.IGNORECASE 作为最后一个参数 iso 模式中的 (?is)。 (3认同)
  • 如何将重新模型应用到我的“文章”变量? (2认同)

And*_*ena 30

@Ignácio是对的,+ 1,我只是提供更多的例子.

要使用正则表达式替换文本,请使用re.sub函数:

sub(pattern,repl,string [,count,flags])

它将替换pattern传递为的文本的非永久实例string.如果您需要分析匹配以提取有关特定组捕获的信息,那么对于isntance,您可以将函数传递给string参数.更多信息在这里.

例子

>>> import re
>>> re.sub(r'a', 'b', 'banana')
'bbnbnb'

>>> re.sub(r'/\d+', '/{id}', '/andre/23/abobora/43435')
'/andre/{id}/abobora/{id}'
Run Code Online (Sandbox Code Playgroud)


Jul*_*ian 7

您可以将该re模块用于正则表达式,但正则表达式可能对您想要的内容有些过分.我可能会尝试类似的东西

z.write(article[:article.index("</html>") + 7]
Run Code Online (Sandbox Code Playgroud)

这比使用基于正则表达式的解决方案要快得多.

  • 不那么干净; 你必须硬编码"</ html>"的长度. (7认同)
  • 我几乎假设这是一个一次性脚本 - 正则表达式方法和字符串搜索方法都有各种各样的输入,它们会失败。对于生产中的任何内容,我希望进行某种比正则表达式或简单字符串搜索可以完成的更复杂的解析。 (4认同)

nor*_*rio 7

对于这种特殊情况,如果使用re模块太过分了,那么使用split(或rsplit) 方法作为

se='</html>'
z.write(article.split(se)[0]+se)
Run Code Online (Sandbox Code Playgroud)

例如,

#!/usr/bin/python

article='''<html>Larala
Ponta Monta 
</html>Kurimon
Waff Moff
'''
z=open('out.txt','w')

se='</html>'
z.write(article.split(se)[0]+se)
Run Code Online (Sandbox Code Playgroud)

输出out.txt

<html>Larala
Ponta Monta 
</html>
Run Code Online (Sandbox Code Playgroud)