Python正则表达式或其他从字符串中提取文本项的解决方案?

2024-04-19 21:59:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串,看起来像这样:

\nInhaltse / techn. Angaben*\n\nAQUA • COCO-GLUCOSIDE • COCOSULFATE • SODIUM\n\n\

我需要得到一个点与点之间的项目列表,如下所示:

AQUA COCO-GLUCOSIDE COCOSULFATE  SODIUM

我尝试过regex和其他工具,但我找不到正确的、灵活的答案

*flexible=列表可能包含1到N个元素


Tags: 工具项目字符串答案列表regexcocoaqua
1条回答
网友
1楼 · 发布于 2024-04-19 21:59:06

您应该更好地定义什么是可能性,以及您要应用哪些规则。
我认为像这样的规则,任何单词至少只有两个大写字符或破折号加空格或\n',可能对您有用。如果是这样的话,这是你的正则表达式:

import re

my_string = "\nInhaltse / techn. Angaben*\n\nAQUA • COCO-GLUCOSIDE • COCOSULFATE • SODIUM\n\n"

print(re.findall(r"(?<=\n|\s)[A-Z-]{2,}(?=\n|\s)", my_string))

输出:

['AQUA', 'COCO-GLUCOSIDE', 'COCOSULFATE', 'SODIUM']

下面是你如何阅读正则表达式的:

(?<=\n|\s)表示前面有(?<=)新行(\n)或(|)空格(\s
[A-Z-\s]{2,}表示至少两个({2,})大写字母、破折号和空格([A-Z-\s]
(?=\n|\s)表示后跟(?=)新行(\n)或(|)空格(\s

或者为了更好地满足您的要求:

get a list of the items between dots

您可以使用:

r"(?<=\n\n|\•\s)[A-Z-\s]{2,}(?=\n\n|\s\•)"

也就是说:

at least 2 uppercase letters, dash or spaces, preceded by two new line or a dot and a space and followed by two new lines or a space and a dot

相关问题 更多 >