我需要一个正则表达式来解析以下字符串中的3个部分:
"Hello World 12 7" -> I want ["Hello World", "12", "7"]
"Goodbye -4 72" -> I want ["Goodbye", "-4", "72"]
文本部分可以包含任意数量的单词,两个数字都可以为负数。
非常感谢提前。
答案 0 :(得分:1)
您可以使用方法Regex.Split()
和正则表达式(?i) (?![a-z])
。
详细说明:
(?i)
不区分大小写(?!)
否定前瞻,匹配空格后面没有[a-z]
C#代码:
string[] substrings = Regex.Split(input, "(?i) (?![a-z])");
输出:
["Hello World", "12", "7"]
["Goodbye", "-4", "72"]
答案 1 :(得分:0)
作为替代方案,您可以匹配值:
(?:(?:[A-Z][a-z]+ )*(?:[A-Z][a-z]+)|-?\d+)
那将匹配:
(?:
非捕获组
[A-Z][a-z]+
非捕获组
)*
大写字符后跟一个或多个小写字符和空格(?:
关闭群组并重复零次或多次[A-Z][a-z]+
非捕获组
)
大写字符后跟一个或多个小写字符|
关闭群组-?\d+
或)
可选短划线后跟一个或多个数字//Gets the steps
func getTodaysSteps(completion: @escaping (Double) -> Void) {
let stepsQuantityType = HKQuantityType.quantityType(forIdentifier: .stepCount)!
let now = Date()
let startOfDay = Calendar.current.startOfDay(for: now)
let predicate = HKQuery.predicateForSamples(withStart: startOfDay, end: now, options: .strictStartDate)
let query = HKStatisticsQuery(quantityType: stepsQuantityType, quantitySamplePredicate: predicate, options: .cumulativeSum) { (_, result, error) in
guard let result = result, let sum = result.sumQuantity() else {
print("Failed to fetch steps = \(error?.localizedDescription ?? "N/A")")
completion(0.0)
return
}
DispatchQueue.main.async {
completion(sum.doubleValue(for: HKUnit.count()))
}
}
healthKitStore.execute(query)
}
关闭群组