我有以下数据示例,其中我需要提取第一个唯一数字,然后提取介于其前面的唯一数字和某个浮点值之间的名称。
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+
问题是它没有在第二组中选择名称。名称可以包含由空格分隔的任意数量的单词。我们知道当浮点值出现后,名称已经结束。请让我知道如何获得这两个值。
答案 0 :(得分:2)
您可以使用
(H\d+)\s+([\w\s]*?)\s*\d+\.\d
见this regex demo。如果\b
是单词中的第一个字母,则前缀为H
字边界。这是its scheme:
<强>详情
(H\d+)
- 第1组:H
和1+位数\s+
- 一个或多个空格([\w\s]*?)
- 第2组:0 +字或空白字符\s*
- 0+ whitespaces \d+\.\d
- 1位数,.
和数字答案 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)
:然后是一个积极的前瞻,以匹配空格,后跟数字,后跟.
,后跟数字。