我需要从字符串中删除数字,但前提是这些数字位于句子的开头。我不想删除句子中的数字。例如:
1房间内有101只达马提亚人。他们有两个父母。新line3的父母被命名为Pongo和Perdita。
在上面的文字中,我想删除每个句子开头的数字,无论这个数字后面是否有空格,包括数字是否是新行上的第一个字符。因此,字符串中的文本需要变成:
房间里有101名达拉马提亚人。他们有两个父母。新的lineThe父母被命名为Pongo和Perdita。
谢谢你的帮忙!
发布于 2021-01-04 20:03:01
您可以枚举这些句子,使用正则表达式来修剪前导数字,并生成最终字符串。
例如。
let string = """
1There were 101 dalmatians in the room. 2 They had 2 parents.
3 The parents were named Pongo and Perdita.
"""
var result: String = ""
string.enumerateSubstrings(in: string.startIndex..., options: .bySentences) { substring, _, _, _ in
guard
let trimmed = substring?.replacingOccurrences(of: #"^\d+\s*"#, with: "", options: .regularExpression)
else { return }
result.append(trimmed)
}
print(result):房间里有101个达利特人。他们有两个父母。
他们的父母名叫Pongo和Perdita。
在正则表达式上有很多排列。例如,如果您使用#"^\d+\.?\)?\s*"#,它还会处理“1.这是一个测试!”或者“1)这是一个测试。”这取决于你想要处理的变化。但是,如果您只是在寻找数字,有或没有空格,那么#"^\d+\s*"#应该是好的。
发布于 2021-01-04 19:56:21
这里有一个不太花哨的解决方案,使用basic for循环遍历字符串的每个字符,并使用布尔值来跟踪句子开头是否有数字。
var checkForDigit = true // State of loop
var digitFound = false // Need this to ignore space after digit
var output = ""
for character in text {
if character.isPunctuation {
output.append(character)
checkForDigit = true
continue
}
if checkForDigit {
if !character.isNumber {
if digitFound && character.isWhitespace {
continue
}
output.append(character)
if !character.isWhitespace {
checkForDigit = false
}
} else {
digitFound = true
}
continue
}
digitFound = false
output.append(character)
}我只是在问题中的例子上测试了它,所以它可能需要一些调整。
发布于 2021-01-04 21:25:26
只是为了好玩。您可以枚举这些句子,获取所有的句子范围,并替换原始字符串的范围。要从每个句子的开头删除数字,可以使用集合方法drop(while:)和从子字符串(句子)中删除所有非字母字符:
extension Bool {
var negated: Bool { !self }
}
var string = """
1There were 101 dalmatians in the room. 2 They had 2 parents.
3 The parents were named Pongo and Perdita.
"""
var ranges: [Range<String.Index>] = []
string.enumerateSubstrings(in: string.startIndex..., options: .bySentences) { _, range, _, _ in
ranges.append(range)
}
for range in ranges.reversed() {
string.replaceSubrange(range, with: string[range].drop(while: \.isLetter.negated))
}
string // "There were 101 dalmatians in the room. They had 2 parents.\nThe parents were named Pongo and Perdita."https://stackoverflow.com/questions/65568443
复制相似问题