使用正则表达式拆分以特定字符开头和结尾的组[重复]

Posted

技术标签:

【中文标题】使用正则表达式拆分以特定字符开头和结尾的组[重复]【英文标题】:Use regex to split groups starting and ending with specific character [duplicate] 【发布时间】:2018-06-16 17:09:58 【问题描述】:

我得到一个这样的字符串...

var string = "A12345678B119292A88B2222A883849B123"

---> (var string ="A12345678B119292A88 B2222A883849B123")

... 并且喜欢将字符串拆分为以 'A' 开头并以 'B' 结尾的特定组,以获得如下结果:

resultArray: "12345678", "88", "883849"

这是我目前发现的:

func matches(for regex: String, in text: String) -> [String] 

    do 
        let regex = try NSRegularExpression(pattern: regex)
        let results = regex.matches(in: text,
                                    range: NSRange(text.startIndex..., in: text))
        return results.map 
            String(text[Range($0.range, in: text)!])
        
     catch let error 
        print("invalid regex: \(error.localizedDescription)")
        return []
    


let string = "A12345678B119292A88B2222A883849B123"
let pattern = "\\.*A.*B" // pattern error

let array = matches(for: pattern, in: string)
print(array)

[?]如何使用 regex 和 Swift 实现这个结果?

【问题讨论】:

另外,如果对您有帮助,请考虑接受/投票(左侧的绿色勾号)答案to your other question 【参考方案1】:

您可以通过“积极的后视/前瞻”来实现这一目标 (比较Lookahead and Lookbehind Zero-Length Assertions):

let string = "A12345678B119292A88B2222A883849B123"
let pattern = "(?<=A).*?(?=B)"

let array = matches(for: pattern, in: string)
print(array)
// ["12345678", "88", "883849"]

模式匹配任意字符序列, 前面是“A”,后面是“B”。

还要注意使用 的“非贪婪”模式.*?,否则你会得到 第一个“A”和最后一个“B”之间的单个匹配。

【讨论】:

诚然,这个问题措辞含糊。我只是从resultArray 中推断出需要数字,但在这里我可能错了。【参考方案2】:

除非你有其他例子,否则你可以使用

(?<=A)\d+(?=B)

a demo on regex101.com


请注意,您需要双转义反斜杠,因此您需要改写(?&lt;=A)\\d+(?=B)

【讨论】:

let pattern = "[AB]\d+" 会导致错误"Invalid escape sequence in literal" 这将匹配以 A 或 B 开头的任何数字序列。OP 只想匹配以 A 开头并以 B 结尾的数字。因此结果将是 ["12345678", "119292", "88", "2222", "883849", "123"] 而这不是 OP 所要求的 @LeoDabus:你说得对,已经更新了答案。

以上是关于使用正则表达式拆分以特定字符开头和结尾的组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - 以特定字符串开头但不以另一个子字符串结尾

正则表达式:数字开头中间字母结尾数字

10 位或 6 位数字的正则表达式不应以“/”开头和结尾,也可以是字符串中的单个单词 [重复]

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式