假设我有:
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"
我找不到任何有效的通配符。非常感谢您提供帮助。
假设我有:
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"
我找不到任何有效的通配符。非常感谢您提供帮助。
def replaceTextBetween(originalText, delimeterA, delimterB, replacementText):
leadingText = originalText.split(delimeterA)[0]
trailingText = originalText.split(delimterB)[1]
return leadingText + delimeterA + replacementText + delimterB + trailingText
限制:
re.sub
:它将两个字符或符号或字符串之间的文本替换为所需的字符或符号或字符串。format: re.sub('A?(.*?)B', P, Q, flags=re.DOTALL)
import re
re.sub('\nThis?(.*?)ok', '', a, flags=re.DOTALL)
output : ' Example String'
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>'
` 标签替换为单词 `test`。
re.sub('<p>?(.*?)</p>', 'test', input_string, flags=re.DOTALL)
otput : '<body> <h1>Heading</h1> test<b>bold text</b></body>'
关键在于DOTALL标志。通常,'.'字符不匹配换行符,因此您不能在字符串中跨行匹配。如果设置DOTALL标志,则re将根据需要跨越尽可能多的行匹配'.*'。
a=re.sub('This.*ok','',a,flags=re.DOTALL)
re.sub(r'^\s*(\w+).*?(\w+)$', r'\1 \2', a, flags=re.DOTALL)