我想在文本中的分隔符[[]]之间找到单个和多个单词,例如:
"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'
结尾的复数。