Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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_String - Fatal编程技术网

Python正则表达式:在较大的文本块中获取特定文本,同时跳过一些行

Python正则表达式:在较大的文本块中获取特定文本,同时跳过一些行,python,regex,string,Python,Regex,String,正如标题所提到的,我的目标是从更大的文本块中获取特定的文本部分。这个“父文本”总是不同的,但是我正在寻找的特定“子”文本的格式总是相同的 下面是一个虚构的文本块示例(有些人可能会认识到它有wiki标记) 在Python中,我想使用某种正则表达式,遵循以下步骤: 查找“=标题=” 跳过一个空行 抓取所有文本,直到遇到下一个空行 这样的话,输出将是: * [[GARY]]: description * [[BOB]]: title * [[JAKE]]: blahblah * [[SALLY]]:

正如标题所提到的,我的目标是从更大的文本块中获取特定的文本部分。这个“父文本”总是不同的,但是我正在寻找的特定“子”文本的格式总是相同的

下面是一个虚构的文本块示例(有些人可能会认识到它有wiki标记)

在Python中,我想使用某种正则表达式,遵循以下步骤:

  • 查找“=标题=”
  • 跳过一个空行
  • 抓取所有文本,直到遇到下一个空行
  • 这样的话,输出将是:

    * [[GARY]]: description
    * [[BOB]]: title
    * [[JAKE]]: blahblah
    * [[SALLY]]: text
    * [[JOHN]]: text
    
    我曾在regex101.com上玩过,但无法获得符合上述规则集的任何内容。可能regex甚至不是这个工作的合适工具,但我一直找不到任何其他似乎可行的工具。

    如果“child”格式始终相同,我们可以用一个简单的regex实现您所描述的。您只需捕获
    =Title=
    之后“\n\n”之间的所有内容:

    re.search(r'^=\sTitle\s=\n\n(.*?(\n\n)),字符串,re.M | re.DOTALL.group(1)
    
    这看起来很棒。它在我提供的示例中工作得很好,但在实际数据中却不够奇怪。在实际数据上,它将捕获预期输出后的下一行,即使格式相同。是不是因为在实际数据中,它没有“废话废话”,而是有一些其他字符,即html标记example@redskins1234,此正则表达式应正确处理格式为“=Title=\n\n\n”的文本。更仔细地检查数据,确保其格式相同。@redskins1234,明白了,我的错。捕获文本应该是非贪婪的(我们应该添加“?”)。编辑了我的答案。
    * [[GARY]]: description
    * [[BOB]]: title
    * [[JAKE]]: blahblah
    * [[SALLY]]: text
    * [[JOHN]]: text