首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只删除字符串中句子开头的数字- Swift

只删除字符串中句子开头的数字- Swift
EN

Stack Overflow用户
提问于 2021-01-04 19:12:18
回答 3查看 198关注 0票数 1

我需要从字符串中删除数字,但前提是这些数字位于句子的开头。我不想删除句子中的数字。例如:

1房间内有101只达马提亚人。他们有两个父母。新line3的父母被命名为Pongo和Perdita。

在上面的文字中,我想删除每个句子开头的数字,无论这个数字后面是否有空格,包括数字是否是新行上的第一个字符。因此,字符串中的文本需要变成:

房间里有101名达拉马提亚人。他们有两个父母。新的lineThe父母被命名为Pongo和Perdita。

谢谢你的帮忙!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-04 20:03:01

您可以枚举这些句子,使用正则表达式来修剪前导数字,并生成最终字符串。

例如。

代码语言:javascript
复制
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*"#应该是好的。

票数 3
EN

Stack Overflow用户

发布于 2021-01-04 19:56:21

这里有一个不太花哨的解决方案,使用basic for循环遍历字符串的每个字符,并使用布尔值来跟踪句子开头是否有数字。

代码语言:javascript
复制
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)
}

我只是在问题中的例子上测试了它,所以它可能需要一些调整。

票数 1
EN

Stack Overflow用户

发布于 2021-01-04 21:25:26

只是为了好玩。您可以枚举这些句子,获取所有的句子范围,并替换原始字符串的范围。要从每个句子的开头删除数字,可以使用集合方法drop(while:)和从子字符串(句子)中删除所有非字母字符:

代码语言:javascript
复制
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."
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65568443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档