问题描述
用户输入:
Hi!
My name is:
Bob
I am from the USA.
Hi!
My name is:
Bob
I am from the USA.
我正在尝试使用以下代码
let regex = try! NSRegularExpression(pattern: "\n[\\s]+",options: .caseInsensitive)
a = regex.stringByReplacingMatches(in: a,options: [],range: NSRange(0..<a.utf16.count),withTemplate: "\n")
但是此代码替换了多个新行“ \ n”,我不想这样做。
运行上面的代码后:"1\n\n\n 2"
-> "1\n2"
。我需要的结果是:"1\n\n\n2"
(仅删除空格,不删除新行)。
解决方法
您可以使用
let regex = try! NSRegularExpression(pattern: "(?m)^\\h+",options: .caseInsensitive)
实际上,由于该模式中没有大小写字符,因此您可以删除.caseInsensitive
并使用:
let regex = try! NSRegularExpression(pattern: "(?m)^\\h+",options: [])
请参见regex demo。该模式表示:
-
(?m)
-启用多行模式 -
^
-由于(?m)
,它匹配任何行的起始位置 -
\h+
-一个或多个水平空白。
快速代码示例:
let txt = "Hi!\n\nMy name is:\n Bob\n\nI am from the USA."
let regex = "(?m)^\\h+"
print( txt.replacingOccurrences(of: regex,with: "",options: [.regularExpression]) )
输出:
Hi!
My name is:
Bob
I am from the USA.
,
不需要正则表达式,将新行字符上的字符串拆分为一个数组,然后修剪所有行并将它们重新连接在一起
let trimmed = string.components(separatedBy: .newlines)
.map { $0.trimmingCharacters(in: .whitespaces) }
.joined(separator: "\n")
或者您可以使用reduce
let trimmed = string.components(separatedBy: .newlines)
.reduce(into: "") { $0 += "\($1.trimmingCharacters(in: .whitespaces))\n"}