如何扩展正则表达式以保留\w、单词间连字符并移除数字
正则调整方案
核心修改逻辑:
原来的正则默认保留的\w包含数字,同时判断连字符边界时用的\w也会把数字判定为合法边界,因此做两处调整:
- 新增数字匹配规则,将所有数字纳入要移除的范围
- 将连字符边界判断条件从
\w(单词字符,含数字)调整为仅匹配字母,确保只有前后都是字母的连字符才会被保留
适配Unicode字母的正则(推荐)
适用支持Unicode属性的正则引擎:Python 3+、Java 8+、JavaScript ES2018+等
\d|[^\p{L} -]|_|-(?!\p{L})|(?<!\p{L})-
使用方式:将所有匹配到该正则的内容替换为空字符串即可。
兼容低版本引擎的正则(适配德语+英文字母)
如果你的正则引擎不支持\p{L}语法,可以手动指定要保留的字母范围:
\d|[^a-zA-ZäöüÄÖÜß -]|_|-(?![a-zA-ZäöüÄÖÜß])|(?<![a-zA-ZäöüÄÖÜß])-
效果验证
用你提供的示例输入测试:
- 输入:
123 !"§$%&/()= äüöüÄÖÜÄßßßß hello-123, hello-hello, hello-. - 输出:
äüöüÄÖÜÄßßßß hello hello-hello hello
完全符合预期要求。
内容的提问来源于stack exchange,提问作者jonas
相关产品推荐
相关产品推荐

