gpt4 book ai didi

需要 Python Regex 帮助

转载 作者:太空狗 更新时间:2023-10-30 02:41:49 27 4
gpt4 key购买 nike

我正在尝试从文本文件中提取数据。对于 ex 在 Jon 2013 年的第 35 行中。 (P) ' 我正在尝试提取 (35, 2013, (P))。

其中35为文件号,2015为文件年,(P)表示优先权文件。

文档编号后跟文档年份,如果文档具有高优先级,则它们末尾有 (P)。

有可能文档的优先级不高,它的末尾不包含 (P)。ex - '31 of Sansa 2014 filled'在此我想提取 (31,2014,'')

我有一个包含文档信息的字符串。问题是字符串是连接在一起的,在一个字符串中有多个文档的信息。

行 = Jon 2013 年的 '35 trans. (P) 31 Sansa 2014 填充 3232 Arya 2014 空 345 Bran 2011 密封, (P) '

我已经编写了以下代码,但它无法正常运行。

rgx = r'(\d{1,9})\s* OF \s*[A-Za-z]+\s*([1,2]\d{3}).*?(\(P\))?'
rgx2 = r'(\d{1,9})\s* OF \s*[A-Za-z]+\s*([1,2]\d{3}).*?(\(P\))'
line = '35 of Jon 2013 trans. (P) 31 of Sansa 2014 filled 3232 of Arya 2014 empty 345 of Bran 2011 sealed, (P)'

x = re.findall(rgx, line, re.IGNORECASE)
for i in x:
print i
print 'Output by rgx2'
x = re.findall(rgx2, line, re.IGNORECASE)
for i in x:
print i

此代码生成的输出:-

('35', '2013', '')
('31', '2014', '')
('3232', '2014', '')
('345', '2011', '')
Output by rgx2
('35', '2013', '(P)')
('31', '2014', '(P)')

虽然第一个正则表达式能够正确捕获文档 ID 和文档年份,但它无法提取 (P) 类型,因为我正在使用“(P)?”。第二个正则表达式的问题是我使用“.*?(P)”来查找 P 类型,它导致了错误的数据。

我想要的正确数据输出是

 ('35', '2013', '(P)')
('31', '2014', '')
('3232', '2014', '')
('345', '2011', '(P)')

谁能推荐一个更好的正则表达式。请帮忙 !

最佳答案

这如你所愿:

import re

reg = r'(\d+)[^\d]*(\d+)[^\d|\(]*(\(P\))*'
line = '35 of Jon 2013 trans. (P) 31 of Sansa 2014 filled 3232 of Arya 2014 empty 345 of Bran 2011 sealed, (P)'

print 'Output by reg'
for _ in re.findall(reg, line, re.IGNORECASE):
print _

关于需要 Python Regex 帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38204533/

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