Python 如果里面没有|},如何用{|到字符串的结尾(多行)替换模式
我需要的是操纵格式错误的wiki代码。 我有: 现在我想从{|到结尾删除,如果里面没有} 我想要的结果是:Python 如果里面没有|},如何用{|到字符串的结尾(多行)替换模式,python,regex,Python,Regex,我需要的是操纵格式错误的wiki代码。 我有: 现在我想从{|到结尾删除,如果里面没有} 我想要的结果是: ''' whatever... {| line1 |} whatever... ''' 我试过: re.sub('{|[^(\|\})]*$', '\n',s) 但失败了 如何做到这一点?首先,您的模式包含一个未转换的,它将成为一个交替操作符。然后,[^(\\\})]*不会对\}序列求反,它只匹配0+字符,而不是(,,}和)) 您可以使用(需要re.DOTALL修饰符): 或其展开
'''
whatever...
{|
line1
|}
whatever...
'''
我试过:
re.sub('{|[^(\|\})]*$', '\n',s)
但失败了
如何做到这一点?首先,您的模式包含一个未转换的
,它将成为一个交替操作符。然后,[^(\\\})]*
不会对\}
序列求反,它只匹配0+字符,而不是(
,
,}
和)
)
您可以使用(需要re.DOTALL
修饰符):
或其展开循环变量(不需要re.DOTALL
修饰符):
看到或看到
图案细节:
-文本{\\\
-一种与任何字符((?:(?!\\\\\\})。*
)匹配的贪婪标记,该字符不以
序列开头(或者展开的变体是
-0+非[^ |]*(?:\\\\\[^ |]*)*
后接0+非
序列,然后是0+非
)
-字符串结束$
第一个块以
{
开始,第二个块以{
开始-它是一个打字错误吗?打字错误,更正了,明白了,你只需要删除最后一个{
-内部的-endOfstring
。我已经更新了所有的演示,我不知道为什么我认为你需要删除所有{124……}/code>块。
re.sub('{|[^(\|\})]*$', '\n',s)
{\|(?:(?!\|}).)*$
{\|[^|]*(?:\|(?!})[^|]*)*$
import re
s = '''
whatever...
{|
line1
|}
whatever...
{|
lineXXX
'''
res = re.sub(r'{\|(?:(?!\|}).)*$', '', s, flags=re.S)
print(res)