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

cas*_*n04 12 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'''
Run Code Online (Sandbox Code Playgroud)

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

a = "Example String"
Run Code Online (Sandbox Code Playgroud)

我找不到任何似乎有效的通配符.任何帮助深表感谢.

Kab*_*bie 13

你需要Regular Expression:

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

  • 对正在发生的事情进行一些详细说明会有所帮助。 (4认同)

Zac*_*ann 10

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

def replaceTextBetween(originalText, delimeterA, delimterB, replacementText):
    leadingText = originalText.split(delimeterA)[0]
    trailingText = originalText.split(delimterB)[1]

    return leadingText + delimeterA + replacementText + delimterB + trailingText
Run Code Online (Sandbox Code Playgroud)

限制:

  • 不检查分隔符是否存在
  • 假设没有重复的分隔符
  • 假设分隔符的顺序正确


Gov*_*nda 8

用途:用所需的字符符号字符串替换两个字符符号字符串re.sub之间的文本。

format: re.sub('A?(.*?)B', P, Q, flags=re.DOTALL)
Run Code Online (Sandbox Code Playgroud)
在哪里
A : 字符或符号或字符串
B:字符或符号或字符串
P:替换A和B之间文本的字符或符号或字符串
问:输入字符串
re.DOTALL :匹配所有行
import re
re.sub('\nThis?(.*?)ok', '', a,  flags=re.DOTALL)

output : ' Example String'
Run Code Online (Sandbox Code Playgroud)

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

input_string = '''<body> <h1>Heading</h1> <p>Paragraph</p><b>bold text</b></body>'''
Run Code Online (Sandbox Code Playgroud)

目标:删除<p>标签

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

output : '<body> <h1>Heading</h1> <b>bold text</b></body>'
Run Code Online (Sandbox Code Playgroud)

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

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

otput : '<body> <h1>Heading</h1> test<b>bold text</b></body>'
Run Code Online (Sandbox Code Playgroud)


小智 5

DOTALL 标志是关键。通常,“.” 字符不匹配换行符,因此不能匹配字符串中的跨行。如果设置 DOTALL 标志,re 将根据需要匹配任意多行的“.*”。