我想在文本中的定界符 [[ ]] 之间找到单个和多个单词,例如:
"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)
但我找不到生成第二个数组的方法或任何其他方法来识别哪个是单数或复数。有什么想法吗?
最佳答案
一个选择是更改您的正则表达式以包含 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'
结尾的复数形式。
关于python - 区分python中分隔符[[]]和[[]]之间的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49455071/