选择一组用空格分隔的单词和正则表达式

时间:2017-10-31 11:52:35

标签: regex

我有以下数据示例,其中我需要提取第一个唯一数字,然后提取介于其前面的唯一数字和某个浮点值之间的名称。

H1765 CONTI CANBERRA 13.4 278.8 CISC TSI 28/23:00 Sa 28/13:00 28/15 00/15 1595 1700

我写了以下正则表达式,在第一组中选择H1725,在第二组中选择名称CONTI CANBERRA

(H\d+)\s+(\w+\s)*.*\d+

问题是它没有在第二组中选择名称。名称可以包含由空格分隔的任意数量的单词。我们知道当浮点值出现后,名称已经结束。请让我知道如何获得这两个值。

2 个答案:

答案 0 :(得分:2)

您可以使用

(H\d+)\s+([\w\s]*?)\s*\d+\.\d

this regex demo。如果\b是单词中的第一个字母,则前缀为H字边界。这是its scheme

enter image description here

<强>详情

  • (H\d+) - 第1组:H和1+位数
  • \s+ - 一个或多个空格
  • ([\w\s]*?) - 第2组:0 +字或空白字符
  • \s* - 0+ whitespaces
  • \d+\.\d - 1位数,.和数字

enter image description here

答案 1 :(得分:1)

这捕获了第一组和第二组:

(H\d+)\s+([A-Za-z\s]+)(?=\s+\d+\.\d)

现场演示here

<强>解释

  • (H\d+)\s+匹配H后跟1位数字,捕获它们,然后匹配1+个空格
  • ([A-Za-z\s]+) :匹配1 + A-Za-z\s
  • (?=\s+\d+\.\d) :然后是一个积极的前瞻,以匹配空格,后跟数字,后跟.,后跟数字。