为什么我的非贪婪匹配在vim中不起作用?

时间:2018-09-06 01:36:27

标签: regex vim

This  is  test

此行中有两个选项卡(\ t)。我想摆脱从开始到第一个Tab键的部分,即“ This”,并且我使用了以下模式:

:s/.\{-}\t//g

它说找不到图案。如果使用以下命令,则两个选项卡都会被替换,这不是我想要的。为什么第一个模式不起作用?

:s/.*\t//g

2 个答案:

答案 0 :(得分:6)

您的第一次尝试无效,因为您匹配的是任何字符中最少的数字,后跟制表符。任何字符的最少数目为零(0)。因此,您的两个标签都匹配,没有其他任何字符。

根据评论,以上解释不正确。

这是一种可能的解决方案。

:s/^[^\t]*\t//

这从头^开始,捕获了任意数量的非制表符[^\t]*,直到到达制表符\t

答案 1 :(得分:1)

由于func getSteps() { let startDate = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: Date())! let endDate = Date() print("Collecting workouts between \(startDate) and \(endDate)") let predicate = HKQuery.predicateForSamples(withStart: startDate, end: endDate, options: HKQueryOptions.strictEndDate) let query = HKSampleQuery(sampleType: HKQuantityType.quantityType(forIdentifier: .distanceWalkingRunning)!, predicate: predicate, limit: HKObjectQueryNoLimit, sortDescriptors: nil) { (query, results, error) in for item in results! { print(item) } } store.execute(query) } 命令中的/.\{-}\t标志,您的模式g不起作用。该标志启用全局匹配,因此它匹配两次。只需删除该标志,它将起作用。另外,删除某些内容时,您可以省略:s中的 replacement 部分:

:s

完整的:s/.\{-}\t 也可以。请注意,在任何一种情况下,都不应像您描述的那样说“找不到模式”。如果您看到该消息,则示例与实际文本之间会有其他差异。