让我说我有:
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"
我找不到任何似乎有用的通配符。非常感谢任何帮助。
答案 0 :(得分:12)
>>> 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>'