提取数字之间的文本Python

2021-12-01 12:02:44 发布

您现在位置:Python中文网/ 问答频道 /正文

(使用Python2.7)

想象一下,在其他文本中,有一个由节号分隔的文本块。我试图提取每个部分的文本,并将其放入一个新的文档中。所以,如果一份两百页的合同有三十个部分用章节号隔开,我希望这三十个部分在一个新的文档中。在

我看了这个答案Extracting parts of text between specific delimiters from a large text file with custom delimiters and writing it to another file using Python,但它似乎没有做我想做的事。在

我试图提取的一个例子是编号部分之间的文本(与编号部分相邻的部分标题将是一个很大的好处),即:

1.2.3.4条。A段

一些文字。还有一些其他的文字。什么的。 下一行还有更多的文字。在

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
2条回答
网友
1楼 ·

好的,如果我理解正确的话,你需要捕捉到段号之间的所有信息。在

这是我想出的regex字符串: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"]

网友
2楼 ·

这不管用吗?在

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

相关问题