19

可以说我有:

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 now 等于:

a = "Example String"

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

4

6 回答 6

18

你需要Regular Expression

>>> import re
>>> re.sub('\nThis.*?ok','',a, flags=re.DOTALL)
' Example String'
于 2013-04-23T02:47:12.797 回答
6

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

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

    return leadingText + delimeterA + replacementText + delimterB + trailingText

限制:

  • 不检查分隔符是否存在
  • 假设没有重复的分隔符
  • 假设分隔符的顺序正确
于 2018-12-18T02:02:08.410 回答
4

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

于 2013-04-23T02:51:20.943 回答
3
a=re.sub('This.*ok','',a,flags=re.DOTALL)
于 2013-04-23T02:46:52.450 回答
3

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

format: re.sub('A?(.*?)B', P, Q, flags=re.DOTALL)
在哪里
A : 字符或符号或字符串
B : 字符或符号或字符串
P : 替换 A 和 B 之间文本的字符或符号或字符串
问:输入字符串
re.DOTALL :匹配所有行
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>'
于 2021-03-25T17:55:31.753 回答
0

如果你想要第一句话和最后一句话:

re.sub(r'^\s*(\w+).*?(\w+)$', r'\1 \2', a, flags=re.DOTALL)
于 2013-04-23T02:50:20.657 回答