繁体   English   中英

提取数字之间的文本-Python

[英]Extract text between digits - Python

(使用Python 2.7)

设想一下一个合同,其中除其他文本外,还有用节号分隔的文本块。 我正在尝试提取每个部分的文本并将其放入新文档中。 因此,如果一两百页的合同有三十个部分,各部分之间用节号分开,我希望将这三十个部分放在新文档中。

我看着这个答案,使用自定义分隔符从大型文本文件中提取特定分隔符之间的部分文本,然后使用Python将其写入另一个文件中,但它似乎并没有达到我想要的目的。

我尝试提取的示例是编号部分之间的文本(与编号部分相邻的部分标题将是一个很大的收获),即:

1.2.3.4。 一节

一些文字。 还有一些其他文字。 和东西。 下一行还有更多文本。

1.2.3.5。 下一节

包含逗号和其他内容的文本更多。 甚至换行符也没什么。

1.2.3.6。 有些部分真的很棒

欢迎来到本节。 这可能比其他人更好。 而且我什至无法开始解释它的强大之处。

1.2.3.7。 什么? 一个新的部分?

当当吧,这是一个新章节! 您还没有准备好吗? 如此多的新章节可用于您永远不会阅读的文本。

理想情况下,我将读取一个文件并输出一个文件。 到目前为止,我已经尝试了以下代码的变体但无济于事。 我意识到这缺少写到输出部分(尚未到达那里):

import codecs
import re

regex = r'\D(?!\d)'

# read a contract in
with codecs.open("/Users/someuser/x/y/blah.txt", "r","utf-8") as ins:
    text = ins.read()

# perform magics
output = re.findall(regex, text)

output

这不行吗?

import codecs
import re

# find anything that matches the header number pattern
regex = r'\d\.\d\.\d\.\d\.\s'

# read a contract in
with codecs.open("/Users/someuser/x/y/blah.txt", "r","utf-8") as ins:
    text = ins.read()

# perform magics, replace with empty string
output = re.sub(regex, '', text)

# output

好的,所以,如果我理解正确的话,您希望捕获节号之间的所有内容。

这是我想到的正则表达式字符串: regex = r'(?:\\d\\.){4}.(.+?)(?:\\d\\.){4}'

让我们分解一下:

(?:\\d\\.){4}这是我们的4个数字,后跟一个句点。 (?:)使其成为非捕获组,因此我们可以寻找该模式将其计数4次,但不能将其添加到我们的比赛中。

(.+?)这是我们要捕获的部分。 当使用不带?:括号时,它将组成一个捕获组,这就是我们要匹配的组。 .+? 表示任何一个或多个非贪婪的字符。 问号是非贪婪的部分,这意味着我们不会永远保持匹配的字符,当我们到达表达式的下一部分时,我们将停止。

(?:\\d\\.){4}我们再次以节模式结束,因为我们想在两个节之间捕获

这是我们用来获取所需内容的代码:

p = re.compile(regex, flags=re.DOTALL)

DOTALL标志允许我们保留换行符,通常是. 匹配除换行符以外的任何字符。

sections = p.findall(text)其中text是您要搜索的字符串

findall方法返回我们匹配的捕获组的列表。

['A section\\n\\nSome text. Some other text, too. And stuff. And even more text on the next line.\\n\\n', "Some sections are really great\\n\\nWelcome to this section. Which is probably better than others. And I can't even begin to explain how great it is.\\n\\n"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM