匹配但不捕获Swift Regex中的字符串

时间:2016-06-06 13:54:13

标签: regex xcode swift2

我试图在给定的字符串中搜索单个普通引号('),然后将其替换为单个曲线引号(')。我测试了更多的模式,但每次搜索都会捕获相邻的文本。例如,在字符串" I' m"中,以及'标记它也得到"我"和" m"。

(?:\\S)'(?:\\S)

是否有可能实现这一目标或在Swift的Regex实现中不支持非捕获组?

修改 实施例

let startingString = "I'm"
let myPattern = "(?:\\S)(')(?:\\S)"
let mySubstitutionText = "’"

let result = (applyReg(startingString, pattern: myPattern, substitutionText: mySubstitutionText))

func applyReg(startingString: String, pattern: String, substitutionText: String) -> String {

    var newStr = startingString

    if let regex = try? NSRegularExpression(pattern: pattern, options: .CaseInsensitive) {
        let regStr = regex.stringByReplacingMatchesInString(startingString, options: .WithoutAnchoringBounds, range: NSMakeRange(0, startingString.characters.count), withTemplate: startingString)
        newStr = regStr
    }
    return newStr
}

2 个答案:

答案 0 :(得分:2)

  

匹配但不捕获Swift Regex中的字符串

在正则表达式中,您可以使用 lookarounds 来实现此行为:

PROFILE 
    MATCH (me:label1{userId:{1}})-[rel:nearby_group]-(group:GROUP)
    WHERE NOT shortestPath((me)-[:relation_1|relation_2*1..3]-(group))
    DELETE rel

请参阅regex demo

Lookarounds不使用它们匹配的文本,它们只返回true或false,以便正则表达式引擎可以决定如何处理当前匹配的文本。如果满足条件,则进一步评估正则表达式模式,如果不满足,则匹配失败。

但是,使用捕获在这里似乎非常有效,不要放弃这种方法。

答案 1 :(得分:1)

将您的报价单独放入捕获组

(?:\\S)(')(?:\\S)

例如,在与"I'm"匹配时,这将捕获["I", "'", "m"]