python - 区分python中分隔符[[]]和[[]]之间的单词

标签 python string

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

"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/

相关文章:

ruby - 单引号与双引号

python - 继续使用使用 tf.reset_default_graph() 之前创建的张量

python - 从两个列表中找到丢失的名字

Python:总是使用 __new__ 而不是 __init__?

Python:将文本字符串从DataFrame提取为长字符串

iphone - 检测用户是否输入了 UITextField

python - Pandas Python : Col[C] if value is in Col[A] and Col[B]

c# - 使用utf16编码将字符串写入流

Python:如何从for循环返回数据?

python - 这条 Python 语句的含义是什么?