我有包含各种事务的文本,我正在try 使用regex进行解析.

文本看起来像这样:

JT Meta Platforms, Inc. - Class A
Common Stock (META) [ST]S (partial) 02/08/2024 03/05/2024 $1,001 - $15,000
F S: New
S O: Morgan Stanley - Select UMA Account # 1
JT Microsoft Corporation - Common
Stock (MSFT) [ST]S (partial) 02/08/2024 03/05/2024 $1,001 - $15,000
F S: New
S O: Morgan Stanley - Select UMA Account # 1
JT Microsoft Corporation - Common
Stock (MSFT) [OP]P 02/13/2024 03/05/2024 $500,001 -
$1,000,000
F S: New
S O: Morgan Stanley - Portfolio Management Active Assets Account
D: Call options; Strike price $170; Expires 01/17 /2025
C: Ref: 044Q34N6

我创建了一个regex来解析单个交易,由股票代码(例如,(MSFT))、类型(例如,[ST]、[OP])和金额(例如,500,000美元等)的组合表示,如下所示:

transactions = rx.findall(r"\([A-Z][^$]*\$[^$]*\$[,\d]+", text)

事务以列表的形式返回,例如:

(META)  [ST]S (partial) 02/08/2024 03/05/2024 $1,001 - $15,000

我想添加逻辑以包含描述详细信息(即,' D:. ')如果它们存在的话. 我try 了下面的模式,但它最终只返回一个大型事务,因为前两个事务没有描述详细信息(即"D:").

我想看看这个:

(META)  [ST]S (partial) 02/08/2024 03/05/2024 $1,001 - $15,000

..

(MSFT)  [ST]S (partial) 02/08/2024 03/05/2024 $1,001 - $15,000

..

(MSFT) [OP]P 02/13/2024 03/05/2024 $500,001 -
$1,000,000
F S: New
S O: Morgan Stanley - Portfolio Management Active Assets Account
D: Call options; Strike price $170; Expires 01/17 /2025

我做错了什么?

rx.findall(r"\([A-Z][^$]*\$[^$]*\$[,\d]+[\s\S]*?D:(.*)", text)

Edit:

为了处理结肠与"D"不连续的情况(不完美的PDF解析),添加到@zdim的答案中,这解决了上述问题:

rx.findall('\([A-Z][^$]*\$[^$]*\$[,\d]+(?:[^$]*D:?.+)?', text)

推荐答案

交易部分后的"其余"(最多及含D:...行)可选

trans = re.findall(
    r'\([A-Z] [^$]* \$[^$]*\$[,\d]+ (?: [^$]* D:.+ )?',
    text, re.X)

for t in trans:
    print(t,'\n---')

这个输出

(META) [ST]S (partial) 02/08/2024 03/05/2024 $1,001 - $15,000 
---
(MSFT) [ST]S (partial) 02/08/2024 03/05/2024 $1,001 - $15,000 
---
(MSFT) [OP]P 02/13/2024 03/05/2024 $500,001 -
$1,000,000
F S: New
S O: Morgan Stanley - Portfolio Management Active Assets Account
D: Call options; Strike price $170; Expires 01/17 /2025 

现在,如果您需要进一步处理额外的文本,应该很容易.

Python相关问答推荐

计算每月过go x年的平均值

将词典写入Excel

如何在vercel中指定Python运行时版本?

Twilio:CallInstance对象没有来自_的属性'

code _tkinter. Tcl错误:窗口路径名称错误.!按钮4"

创建带有二维码的Flask应用程序,可重定向到特定端点

如何使用matplotlib在Python中使用规范化数据和原始t测试值创建组合热图?

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

如何在Windows上用Python提取名称中带有逗号的文件?

2D空间中的反旋算法

Telethon加入私有频道

如何在Raspberry Pi上检测USB并使用Python访问它?

Scrapy和Great Expectations(great_expectations)—不合作

Pandas Loc Select 到NaN和值列表

mypy无法推断类型参数.List和Iterable的区别

索引到 torch 张量,沿轴具有可变长度索引

SQLAlchemy bindparam在mssql上失败(但在mysql上工作)

如何更改groupby作用域以找到满足掩码条件的第一个值?

lityter不让我输入左边的方括号,'

Python—压缩叶 map html作为邮箱附件并通过sendgrid发送