我想在Python中使用正则表达式来匹配模式和可选的可能存在于模式内部或外部的字符,但不仅仅是字符。
例如。匹配可能出现在之前、中间或末尾的带有
'
的单词。
理想的模式将匹配
'word
、wo'rd
、word'
、word
,但不应与 '
本身匹配。
有没有办法做到这一点WITHOUT使用像
r"[a-z']*[a-z]+[a-z']*"
这样的超级厚实模式或操纵数据以消除与re.sub(r" '+ ", " ")
的匹配
我正在寻找类似于
[\w']+
的简单模式,它将匹配特定模式以及可能与其相邻的指定字符,但在与模式不相邻时不匹配指定字符。
我猜你想匹配
'字,字,字',字,不应该和没有'
但不是
', wo''d, ''wod, wod'', ^猫或狗&。
在这种情况下,可以匹配
(?<!\S)(?![a-z']*'')[a-z']*[a-z][a-z']*(?!\S)
我在演示中以“扩展模式”表达了正则表达式,以提高可读性。这会触发预处理步骤,在解析表达式之前删除注释和空格。
备注:(?<!\S)
(与
(?<=^|\s)
相同)是一个
负向查找,断言当前匹配项前面没有空格以外的字符。
(?![a-z']*'')
是一个负向前看
,断言当前位置后面没有一个或多个字母或撇号,后跟连续两个撇号。
[a-z']*[a-z][a-z']*
匹配包含一个字母和任意数量的撇号的单词。
(?!\S)
(与
(?=\s|$)
相同)是一个
负向先行,断言当前匹配项后面没有除空格之外的字符。