如何抓住';是否不在非捕获组中?-python

如何抓住';是否不在非捕获组中?-python,python,regex,quotation-marks,capturing-group,Python,Regex,Quotation Marks,Capturing Group,给定字符串: I'll be going home I've the 'v ' isn't want I want to split but I want to catch tokens like 'v and 'w ' . 目标是抓住: 'v 'v 'w 但是要避免've和'll和't 我试着用(?I)\'(?:ve | ll | t)\b来捕捉've和't,例如 >>> import re >>> x = "I'll be going home I'

给定字符串:

I'll be going home I've the 'v ' isn't want I want to split but I want to catch tokens like 'v and 'w ' .
目标是抓住:

'v 
'v
'w
但是要避免
've
'll
't

我试着用
(?I)\'(?:ve | ll | t)\b
来捕捉
've
't
,例如

>>> import re
>>> x = "I'll be going home I've the 'v ' isn't want I want to split but I want to catch tokens like 'v and 'w ' ."
>>> pattern = r"(?i)\'(?:ve|ll|t)\b"
>>> re.findall(pattern, x)
["'ll", "'ve", "'t"]
但是我也试着否定
(?I)\'(?:ve | ll | t)\b中的非捕获组,就像这样
(?I)\'[^(?:ve | ll | t)]\b
但是它没有捕获到
'v
'w
这是期望的目标

如何捕获单引号后面但不是预定义子字符串列表中的子字符串,即
'll
've
't


我也试过这个,但没用:

pattern = "(?i)\'(?:[^ve|ll|t|\s])\b"

但是
[^…]
只识别单个字符而不识别子字符串。

非捕获组的负前瞻性是
(?!…)
,因此它类似于
(?i)\'(?!ve | ll | t)\w\b

>>> pattern = r"(?i)\'(?!ve|ll|t)\w\b"
>>> x = "I'll be going home I've the 'v ' isn't want I want to split but I want to catch tokens like 'v and 'w ' ."
>>> re.findall(pattern, x)
["'v", "'v", "'w"]

非捕获组的负前瞻是
(?!…)
,因此它类似于
(?i)\'(?!ve | ll | t)\w\b

>>> pattern = r"(?i)\'(?!ve|ll|t)\w\b"
>>> x = "I'll be going home I've the 'v ' isn't want I want to split but I want to catch tokens like 'v and 'w ' ."
>>> re.findall(pattern, x)
["'v", "'v", "'w"]
也许这样行吗

\'(?!ve|ll|t|\s)\w+
您可以使用前瞻断言来过滤不需要的内容

更新 在其他一些语言中,模式先行断言必须是固定长度的

这意味着
(?!ve | t)
是无效的,因为
ve
t
有两个不同的长度。

也许这样行吗

\'(?!ve|ll|t|\s)\w+
您可以使用前瞻断言来过滤不需要的内容

更新 在其他一些语言中,模式先行断言必须是固定长度的

这意味着
(?!ve | t)
无效,因为
ve
t
有两个不同的长度