gpt4 book ai didi

python - 如何匹配文本和可选的重复标识符并将它们组合在一起?

转载 作者:行者123 更新时间:2023-12-04 17:15:58 24 4
gpt4 key购买 nike

我正在尝试提取一段文本,后跟一个或多个标识符(用斜杠分隔),并使用 python 中的正则表达式将标识符与文本 block 分组。

这是一些虚拟示例数据:

Lorem ipsum dolor sit amet, consectetur adipiscing elit.
EX 0-02a
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Vestibulum eget vestibulum sapien.
Sed porta, odio id sollicitudin congue
EX 0-04a

Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Vestibulum eget vestibulum sapien, sed porta, odio id sollicitudin congue
Lorem ipsum dolor sit amet
EX 0-01a / EX 0-05a / EX 0-07a /
EX 0-08a


Lorem ipsum dolor sit amet,
consectetur adipiscing
elit.
Vestibulum eget
vestibulum sapien.
EX 3-11b

到目前为止,我已经创建了这个正则表达式:

(.*?)(\w{2,4} \d-\d{0,2}\w)

这成功地捕获了文本和一个单一代码,但是一些 block 有多个代码(有时在多行上)并且这些代码没有组合在一起,因为/'s 被选为匹配项。

这是我需要的那种输出:

[(Lorem ipsum dolor sit amet, consectetur adipiscing elit.), (EX 0-01a / EX 0-02a / EX 0-05b / EX 0-03a)]

正则表达式 101:https://regex101.com/r/Wfc4nj/1

最佳答案

您可以重复匹配捕获组中标识符的模式,并使用 \s+ 匹配 1 个或多个空白字符,如果标识符可以跨多行,这些字符也匹配换行符。

\s*(.+?)\s*(\w{2,4} \d-\d{0,2}\w(?:\s+/\s+\w{2,4} \d-\d{0,2}\w)*)

查看 regex demo和一个 Python demo .

例如

import re

pattern = r"\s*(.+?)\s*(\w{2,4} \d-\d{0,2}\w(?:\s+/\s+\w{2,4} \d-\d{0,2}\w)*)"

s = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n"
" EX 0-02a\n"
"Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n"
"Vestibulum eget vestibulum sapien.\n"
"Sed porta, odio id sollicitudin congue\n"
" EX 0-04a\n\n"
"Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n"
"Vestibulum eget vestibulum sapien, sed porta, odio id sollicitudin congue\n"
"Lorem ipsum dolor sit amet\n"
"EX 0-01a / EX 0-05a / EX 0-07a /\n"
"EX 0-08a\n\n\n"
"Lorem ipsum dolor sit amet, \n"
"consectetur adipiscing \n"
"elit.\n"
"Vestibulum eget \n"
"vestibulum sapien.\n"
" EX 3-11b")

print(re.findall(pattern, s, re.S))

输出

[
('Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'EX 0-02a'),
('Lorem ipsum dolor sit amet, consectetur adipiscing elit.\nVestibulum eget vestibulum sapien.\nSed porta, odio id sollicitudin congue', 'EX 0-04a'),
('Lorem ipsum dolor sit amet, consectetur adipiscing elit.\nVestibulum eget vestibulum sapien, sed porta, odio id sollicitudin congue\nLorem ipsum dolor sit amet', 'EX 0-01a / EX 0-05a / EX 0-07a /\nEX 0-08a'),
('Lorem ipsum dolor sit amet, \nconsectetur adipiscing \nelit.\nVestibulum eget \nvestibulum sapien.', 'EX 3-11b')
]

关于python - 如何匹配文本和可选的重复标识符并将它们组合在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68705256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com