正则表达式替换每行的空格

Regex replace spaces at each new lines

我将用户输入的数据保存为字符串,我想删除每行的所有空格。

来自用户的输入:

Hi!

My name is:
   Bob

I am from the USA.

我想删除“Bob”之间的空格,所以结果将是:

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+ - 一个或多个水平空格。

Swift 代码示例:

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.

无需正则表达式,将换行符上的字符串拆分为一个数组,然后 trim 所有行并再次将它们连接在一起[=13​​=]

let trimmed = string.components(separatedBy: .newlines)
    .map { [=10=].trimmingCharacters(in: .whitespaces) }
    .joined(separator: "\n")

或者您可以使用 reduce

let trimmed = string.components(separatedBy: .newlines)
    .reduce(into: "") { [=11=] += "\(.trimmingCharacters(in: .whitespaces))\n"}