如何抓住';是否不在非捕获组中?-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
有两个不同的长度