python - 提取数字之间的文本 - Python

标签 python regex

(使用Python 2.7)

想象一份契约(Contract),除其他文本外,还包含由部分编号分隔的文本 block 。我正在尝试提取每个部分的文本并将其放入一个新文档中。因此,如果一份 200 页的契约(Contract)有 30 个部分,由部分编号分隔,我希望这 30 个部分位于一个新文档中。

我看了这个答案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。一节

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

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

最佳答案

好吧,如果我理解正确的话,您想要捕获节号之间的所有内容。

这是我想出的正则表达式字符串: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 部分\n\n一些文本。还有其他一些文字。和东西。下一行还有更多文字。\n\n',“有些部分真的很棒\n\n欢迎来到本部分。这可能比其他部分更好。我什至无法开始解释它有多棒。\n\n"]

关于python - 提取数字之间的文本 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37734262/

相关文章:

python - 优雅处理 "MySQL has gone away"

python - 改进 Numpy 中的矩阵乘法

python - django,基于位置的搜索

javascript - 替换 HTML 字符串和避免标记(正则表达式)

regex - R 正则表达式和聚合/子集

java - 如何从tensorflow tflite模型的posenet获取姿势坐标

python - Python 3.5 中的 JSON 错误

javascript - 使用正则表达式在至少一个数字后允许逗号

javascript - 在javascript中匹配特定的url

javascript - 如何在不使用 DOM/ActiveXObject 的情况下读取带有 javascript/ionic 属性的 xml 标签之间的数据?