【问题标题】:Nth non-whitespace regex match第 N 个非空白正则表达式匹配
【发布时间】:2019-09-14 05:38:01
【问题描述】:

我想选择第 n 个非空白正则表达式匹配。 我有一个包含一些数据的 txt 文件(字符串)。每个数据用空格隔开。

我的正则表达式找到每个匹配项:/\S+/g

字符串:

12345 - - - 23.6 32 1003.0 0.00 3.20 28.60 0.00 0.00 25.8 21 - 2 - - 0 0.00 23.0 - - - 23.1 22.2 - - - 16 54 14 Ĺagiewniki_M.-16:54 0 - 12 0 - - - 23.2 23.7 8.6 2 - -1 - - - - - - - - - - - - - - - - - - - - 5.9 7080 12/09/2019 24.1 8.7 - - - - - - - - - - - - - 22.8 23.2 22.9 21.6 20.3 18.5 16.3 12.7 9.9 8.8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 23.7 8.6 23.6 - 0 _ _ - _ 0 - - - - - - - 0 25.8 23.2 - 1005.0 1001.0 - --: -- --:-- - - 13.6 5.3 -.- 2019 _ 0 0 0 - - - - - - - - - - - - - - 50.683056 -18.51 - 95.0 31.0 - --:-- !!C10.37Of !!

我使用了https://regex101.com/,我在网站上看到了数学 1、2 等,但我找不到我想找到的唯一一个(例如第 5 个匹配项)。

【问题讨论】:

标签: regex


【解决方案1】:

您可以使用此正则表达式来获取第 5 个非空白字段:

/^\s*(?:\S+\s+){4}(\S+)/

RegEx Demo

正则表达式详细信息:

  • ^\s*: 在开始时匹配 0 个或多个空格
  • (?::启动非捕获组
    • \S+: 匹配 1+ 个非空白字符
    • \s+: 匹配 1+ 个空白字符
  • ){4}:结束非捕获组。匹配此非捕获组的 4 个实例。
  • (\S+): 匹配并捕获组 #1 中的 1+ 个非空白字符

一般来说,通过相应地替换 N 来获取任何第 N 个值使用此正则表达式:

 /^\s*(?:\S+\s+){N}(\S+)/

【讨论】:

    【解决方案2】:

    重复的捕获组只会捕获最后一次迭代。

    如果您使用repeated capturing group,它会更简单。仅捕获最后一个捕获的组。匹配将在正则表达式解析返回的第一个捕获组中。唯一要注意的是,这个特殊的正则表达式也会返回空间,所以如果你不需要它,你必须把它剪掉。

    /(\S+\s){5}/ 第 1 组。23.6

    Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-03
      • 2017-05-09
      • 2012-09-17
      • 2014-06-26
      • 1970-01-01
      • 2022-12-17
      • 2015-04-10
      相关资源
      最近更新 更多