【发布时间】:2023-01-16 22:51:28
【问题描述】:
我有一个固定尺寸的列表:
sizes = ['extra small', 'small', 'medium', 'large', 'extra large']
我想从文本中提取对这些尺寸的任何提及。然而,当我输入这样的文本时,“特小”与“小”、“特大”与“大”之间的关系很复杂:
text1 = 'she wears a small size and he wears an extra large'
在尝试匹配较小的字符串之前,我想出了以下语法来匹配较大的字符串:
import re
sizes = ['extra small', 'small', 'medium', 'large', 'extra large']
text1 = 'she wears a small size and he wears an extra large size'
mentioned_sizes = []
sizes.sort(key=lambda x: len(x.split()), reverse=True)
for x in sizes:
if len(x.split()) > 1:
if re.findall(x, text1):
mentioned_sizes.append(x)
elif len(x.split()) == 1:
if (x in text1) and (x not in [item for sublist in [x.split() for x in mentioned_sizes] for item in sublist]):
mentioned_sizes.append(x)
这给了我 ['extra large', 'small'] for the mentioned_sizes,这就是我想要的。但是,当文本变成这样时,我遇到了一个问题:
text2 = 'she wears a large size and he wears an extra large size'
对于 mentioned_sizes,我现在只得到 ['extra large'],而不是 ['extra large', 'large']。如何提取文本中提到的尺寸?
【问题讨论】:
-
制作一个结合所有大小的正则表达式模式:
(extra small|small|medium|large|extra large)并使用 findall 与此模式。无需拆分文本或在每个单词上循环。
标签: python