Swift正则表达式:移除字符串中嵌入单词内部的数字
移除Swift字符串中嵌入单词内部的数字
需求
只删除夹在单词中间的数字,保留单词开头或结尾的数字。比如把wi3th变成with,但保留5What's9里的前后数字。
输入示例
let testString = "5What's9 wi3th this pro9ject I'm try905ing to build."
期望输出
let resultString = "5What's9 with this project I'm trying to build."
之前尝试的问题
- 用
\\b[:digit:]\\b:语法错误,无法匹配目标数字,返回原字符串 - 用
(\\d+)或[0-9]:会删除所有数字,不符合保留单词首尾数字的要求
解决方法
使用带前后断言的正则表达式,精准匹配被单词字符包围的数字,再替换为空字符串。
代码实现
let testString = "5What's9 wi3th this pro9ject I'm try905ing to build." let resultString = testString.replacingOccurrences( of: "(?<=[^\\d\\W])\\d+(?=[^\\d\\W])", with: "", options: .regularExpression ) print(resultString) // 输出:5What's9 with this project I'm trying to build.
正则解释
(?<=[^\\d\\W]):反向预查,确保数字前面是「非数字、非单词分隔符」的字符(比如字母、撇号这类单词组成部分)\\d+:匹配一个或多个连续数字(?=[^\\d\\W]):正向预查,确保数字后面也是「非数字、非单词分隔符」的字符
这样就能精准定位到嵌入单词内部的数字,不会误删位于单词开头或结尾的数字。
内容的提问来源于stack exchange,提问作者Scott W
相关产品推荐
相关产品推荐

