我想在文本中的分隔符[[]]之间找到单个和多个单词,例如:

"I have a red [[pen]], two blue [[pen]]s, two black [[pencil]]s and a green [[pencil]]"

应该是
['pen', 'pen', 'pencil', 'pencil']

另一个列表显示了哪一个是单的例如0代表单,1代表复数:
[0, 1, 1, 0]

我知道使用以下代码可以提取前一个列表:
re.findall(r'\[\[(.*?)\]\]', str)

但我找不到产生第二个数组的方法,也找不到其他方法来识别哪一个数组是单数组还是复数数组。知道吗?

最佳答案

一个选项是更改regex以包含s?的第二个捕获组。

s = "I have a red [[pen]], two blue [[pen]]s, two black [[pencil]]s and a green [[pencil]]"
pat = r"\[\[(.*?)\]\](s?)"
matches = re.findall(pat, s)
print(matches)
#[('pen', ''), ('pen', 's'), ('pencil', 's'), ('pencil', '')]

如您所见,matches中的元素是元组现在只需使用列表理解并检查's'中每个元组的第二个元素。
myList = [1 if m[1] else 0 for m in matches]
print(myList)
#[0, 1, 1, 0]

显然,这只适用于以's'结尾的复数。

10-02 22:59