在C#中使用正则表达式解析字符串

时间:2018-03-10 13:00:43

标签: c# regex

我需要一个正则表达式来解析以下字符串中的3个部分:

"Hello World 12 7" -> I want ["Hello World", "12", "7"]
"Goodbye -4 72" -> I want ["Goodbye", "-4", "72"]

文本部分可以包含任意数量的单词,两个数字都可以为负数。

非常感谢提前。

2 个答案:

答案 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"]

Code demo

答案 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) } 关闭群组

Demo C#