替换2个字符串python之间的所有文本

时间:2013-04-23 02:37:55

标签: python

让我说我有:

a = r''' Example
This is a very annoying string
that takes up multiple lines
and h@s a// kind{s} of stupid symbols in it
ok String'''

我需要一种方法在“This”和“ok”之间进行替换(或者只是删除)和文本,这样当我调用它时,现在等于:

a = "Example String"

我找不到任何似乎有用的通配符。非常感谢任何帮助。

6 个答案:

答案 0 :(得分:12)

您需要Regular Expression

>>> import re
>>> re.sub('\nThis.*?ok','',a, flags=re.DOTALL)
' Example String'

答案 1 :(得分:3)

DOTALL标志是关键。通常,'。'字符与换行符不匹配,因此您不能跨字符串中的行匹配。如果你设置了DOTALL标志,则re将匹配'。*'尽可能多的行。

答案 2 :(得分:0)

a=re.sub('This.*ok','',a,flags=re.DOTALL)

答案 3 :(得分:0)

如果你想要第一个和最后一个字:

re.sub(r'^\s*(\w+).*?(\w+)$', r'\1 \2', a, flags=re.DOTALL)

答案 4 :(得分:0)

另一种方法是使用字符串拆分:

def replaceTextBetween(delimeterA, delimterB, contents, innerContent):
    contentsPrefix = contents.split(delimeterA)[0]
    contentsSuffix = contents.split(delimterB)[1]

    return contentsPrefix + delimeterA + innerContent + delimterB + contentsSuffix

限制:

  • 不检查分隔符是否存在
  • 假设没有重复的定界符

答案 5 :(得分:0)

Use re.sub :它将两个字符符号字符串之间的文本替换为所需的字符符号字符串

format: re.sub('A?(.*?)B', P, Q, flags=re.DOTALL)
where 
A : character or symbol or string
B : character or symbol or string
P : character or symbol or string which replaces the text between A and B
Q : input string
re.DOTALL : to match across all lines
import re
re.sub('\nThis?(.*?)ok', '', a,  flags=re.DOTALL)

output : ' Example String'

让我们看一个以 html 代码作为输入的例子

input_string = '''<body> <h1>Heading</h1> <p>Paragraph</p><b>bold text</b></body>'''

目标:删除 <p> 标签

re.sub('<p>?(.*?)</p>', '', input_string,  flags=re.DOTALL)

output : '<body> <h1>Heading</h1> <b>bold text</b></body>'

目标:用单词替换 <p> 标签:test

re.sub('<p>?(.*?)</p>', 'test', input_string,  flags=re.DOTALL)

otput : '<body> <h1>Heading</h1> test<b>bold text</b></body>'