首页 > 解决方案 > Python 的正则表达式 findall 不返回 Unicode 文本的所有匹配项

问题描述

我有一个 unicode 文本,其中包含一个期刊列表,其中包含每个期刊的一些详细信息。我只想检索期刊的名称。

我的文字很大,看起来像这样:

匈牙利布达佩斯,H-1117 社会科学引文索引艺术与人文引文索引 15)15。ACTA LITERARIA Semiannual ISSN: 0717-6848 UNIV CONCEPCION, FAC HUMANIDADES ARTE, CASILLA 160-C, CORREO 3, CONCEPCION, CHILE, 00000 Arts & Humanities Citation Index 16) 16. ACTA MUSICOLOGICA Semiannual ISSN: 0001-6241 INT MUSICOLOGICAL SOC, BOX 561, BASEL, SWITZERLAND, CH-4001 Arts & Humanities 引文索引 Current Contents - Arts & Humanities 17) 17. ACTA ORIENTALIA ACADEMIAE 匈牙利科学季刊 ISSN: 1588-2667 AKADEMIAI KIADO ZRT, BUDAFOKI UT 187-189-A-3, BUDAPEST , HUNGARY, H-1117 Arts & Humanities 引文索引 5 تاریخ انتشار: 89/2/62 پژوهشگاه و شبکه آزمایشگاهی 98/3 :Code Current Contents - Arts & Humanities 18) 18. ACTA哲学半年刊ISSN:1121-2179 FABRIZIO SERRA EDITORE, PO BOX NO,1, SUCC NO. 8, PISA, ITALY, I-56123 Arts & Humanities Citation Index Current Contents - Arts & Humanities

它想要比赛返回

跨语言和跨文化 半年一次

ACTA ANALYTICA-分析传统中的哲学国际期刊季刊

考古学年刊

等等

我已经尝试过(https://regex101.com/r/eyafNd/1)并且在 reg101 网站上,它似乎有效。

regex = r"^(\d+\)\s*\d+\.\s+)(.*?) ISSN"
l = re.findall(regex,txt,re.IGNORECASE)
print(len(l))
print(l)

它返回的是只有 1 个结果的列表,如下所示

[('6) 6. ', 'ACROSS LANGUAGES AND CULTURES Semiannual')]

任何帮助,将不胜感激。

CS

标签: pythonregexpython-3.xfindall

解决方案


也许看看这个正则表达式:

(?<=\d\.\s).+?(?=\sISSN)

正则表达式演示

regex = r"(?<=\d\.\s).+?(?=\sISSN)"
l = re.findall(regex, txt, re.I)
print(len(l))
print(l)

这表示在数字+点+空格之后开始匹配,直到字符whitespace+ISSN。然后,我可以确认,当我编写您的文本时,我会收到以下带有您的代码的输出列表:

['ACROSS LANGUAGES AND CULTURES Semiannual', 'ACTA ANALYTICA-INTERNATIONAL PERIODICAL FOR PHILOSOPHY IN THE ANALYTICAL TR ADITION Quarterly', 'ACTA ARCHAEOLOGICA Annual'...]

推荐阅读