我需要删除标点符号周围的前导和尾随空格。
例如:Hello , World ...我是 iOS 开发新手。
我想要:> Hello, World...我是 iOS 开发新手。
我该怎么做?我试图获取字符串的组成部分并通过句子来枚举它。但这不是我需要的
最佳答案
Rob 的回答很好,但您可以通过利用 \p{Po}
正则表达式类将其精简很多。去掉标点符号周围的空格就变成了一个正则表达式替换:
import Foundation
let input = "Hello , World ... I 'm a newbie iOS Developer."
let result = input.replacingOccurrences(of: "\\s*(\\p{Po}\\s?)\\s*",
with: "$1",
options: [.regularExpression])
print(result) // "Hello, World... I'm a newbie iOS Developer."
Rob 的回答还尝试修剪前导/尾随空格,但您的输入没有任何这些。如果您确实关心这一点,您只需对结果调用 result.trimmingCharacters(in: .whitespacesAndNewlines)
。
这是对正则表达式的解释。删除它看起来像的双重转义
\s*(\p{Po}\s?)\s*
它由以下组件组成:
\s*
- 匹配零个或多个空白字符(并丢弃它们)(…)
- 捕获组。该组内的任何内容都由替换项保留(替换项中的$1
指的是该组)。\p{Po}
- 匹配“Other_Punctuation”unicode 类别中的单个字符。这包括.
、'
和...
,但不包括(
或-
。\s?
- 匹配一个可选的空白字符。这会保留句号(或省略号)后的空间。
\s*
- 再次匹配零个或多个空白字符(并将它们丢弃)。这就是将您的, World
变成, World
的原因。
关于swift - 如何从 Swift 中的字符串中删除空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46532885/