求匹配单双引号但排除缩约词与所有格标记的正则表达式
解决方案
要匹配作为引用边界的单双引号,同时排除缩约词、单词内部引号和所有格引号,可使用以下正则表达式:
/(?<!\w(?:['"]\w|s))[\"'](?!\w(?:['"]\w|s))/gm
正则说明
该正则通过负向断言精准排除不需要匹配的引号场景:
(?<!\w(?:['"]\w|s))负向后瞻:确保引号前不是以下两种情况\w['"]\w:单词字符+引号+单词字符(排除单词内部引号,如O'Connell、can't里的')\ws:单词字符+s(排除复数名词所有格引号,如Connells'里的')
[\"']:匹配目标单引号或双引号(?!\w(?:['"]\w|s))负向前瞻:确保引号后不是以下两种情况\w['"]\w:同上,排除单词内部引号\ws:排除单数名词所有格引号,如O'Connell's里的'
测试验证
针对你提供的测试文本:
" I'm not going, so won't you go instead? ""Hi", 'I can't go!' I'm not going, so won't you go 'instead'? O'Connell's bar is "good" O'Connells' bar is 'excellent'
匹配结果如下(仅列出需要匹配的引号):
- 第一行开头的
"、结尾的",以及""Hi""中的4个" - 第一行
'I can't go!'开头的' - 第二行
'instead'中的两个' - 第三行
"good"中的两个" - 第四行
'excellent'中的两个'
所有缩约词(I'm、won't、can't)、单词内部引号(O'Connell)、所有格引号(O'Connell's、Connells')均被正确排除。
内容的提问来源于stack exchange,提问作者macasas
相关产品推荐
相关产品推荐

