【问题标题】:Python Regex: How Can I find Recurring Blocks of Texts in a Text File [duplicate]Python Regex:如何在文本文件中找到重复出现的文本块 [重复]
【发布时间】:2021-09-30 02:34:07
【问题描述】:

我正在尝试使用 Python 解析以“----BEGIN---”开头并以“---END”结尾的重复文本块。所以文本文件将如下所示。基本上,我希望能够找到每个块(单词、数字和特殊字符)并解析它们以进行进一步分析。下面的代码与我得到的一样接近,但它返回整个文档,而不是每个块。任何帮助将不胜感激。

block_search = re.compile('----BEGIN---.*---END',re.DOTALL)
with open(file,'r',encoding='utf-8') as f:
    text = f.read()
    result = re.findall(block_search,text)

----开始--- 单词特殊字符数字单词特殊字符单词数字单词单词。 单词 数字 单词 特殊字符 单词 数字 单词 单词 单词 数字 单词 单词 ---结束

----开始--- 单词单词数字单词特殊字符单词数字单词单词。 单词 数字 单词 特殊字符 单词 数字 单词 单词 单词数字单词单词... ---结束

【问题讨论】:

    标签: python regex text nlp


    【解决方案1】:

    '----BEGIN---.*---END' 将匹配从----BEGIN--- 的第一次出现到---END 的最后一次出现的任何内容,这就是.* 所做的。 如果要查找特定的块,使用.*?,它会在它后面的子字符串第一次出现后停止,或者换句话说,它只会搜索直到找到它后面的子字符串。

    block_search = re.compile('----BEGIN---.*?---END',re.DOTALL)
    

    【讨论】:

    • 这让我成功了 90%。我现在不明白的是,使用 re.findall() 它不会找到块的每个实例。
    • 是的,您只缺少?。对于您拥有的示例数据,它正在查找这两个事件。
    • 没有。我在那里理解你。我的代码存在一个不同的问题,导致它无法找到块的以下迭代。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-02-03
    • 2017-04-27
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 2013-05-13
    相关资源
    最近更新 更多