正则表达式需求:仅允许单引号出现在单词内部,禁止连续单引号
解决方案
直接替换原代码的正则处理逻辑,分三步处理就能实现你的需求:
// 1. 清除连续的单引号(2个及以上) s = Regex.Replace(s, @"'{2,}", " "); // 2. 清除不在字母之间的单引号(开头、结尾、非字母旁的) s = Regex.Replace(s, @"(?<![a-zA-Z])'|'(?![a-zA-Z])", " "); // 3. 清理其他非法字符并统一格式 s = Regex.Replace(s, @"[^a-zA-Z']+", " ").Trim().ToLower();
逻辑说明:
- 第一步
@"'{2,}":匹配2个或更多连续单引号,直接替换成空格,彻底干掉连续单引号的情况。 - 第二步用断言精准定位无效单引号:
(?<![a-zA-Z])':匹配前面不是英文字母的单引号(比如字符串开头的'、数字后的')'(?![a-zA-Z]):匹配后面不是英文字母的单引号(比如字符串结尾的'、'后跟符号/数字)
把这些不在单词内部的单引号全部替换成空格。
- 第三步保留你原有的清理非字母/合法单引号的逻辑,加上
Trim()去掉首尾多余空格,最后转小写。
示例测试:
输入:'''won't''test'123'hello
输出:won't test hello
内容的提问来源于stack exchange,提问作者user18084277
相关产品推荐
相关产品推荐

