Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果里面没有|},如何用{|到字符串的结尾(多行)替换模式_Python_Regex - Fatal编程技术网

Python 如果里面没有|},如何用{|到字符串的结尾(多行)替换模式

Python 如果里面没有|},如何用{|到字符串的结尾(多行)替换模式,python,regex,Python,Regex,我需要的是操纵格式错误的wiki代码。 我有: 现在我想从{|到结尾删除,如果里面没有} 我想要的结果是: ''' whatever... {| line1 |} whatever... ''' 我试过: re.sub('{|[^(\|\})]*$', '\n',s) 但失败了 如何做到这一点?首先,您的模式包含一个未转换的,它将成为一个交替操作符。然后,[^(\\\})]*不会对\}序列求反,它只匹配0+字符,而不是(,,}和)) 您可以使用(需要re.DOTALL修饰符): 或其展开

我需要的是操纵格式错误的wiki代码。 我有:

现在我想从{|到结尾删除,如果里面没有}

我想要的结果是:

'''
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)