我试图在给定的字符串中搜索单个普通引号('),然后将其替换为单个曲线引号(')。我测试了更多的模式,但每次搜索都会捕获相邻的文本。例如,在字符串" 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
}
答案 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"]