如何用正则表达式解析某个单词后的文本?

How parse a text after some word with regular expressions?

我需要提取 "vertex" 之后的所有数字,但是我的正则表达式 (?<=vertex)\s((-?\d*\.?\d+)\s*)* return 最后一个数字。

文本模板:

vertex
144.64329 -65.95227 -40.5391
244.25595 -77.64196 -51.07746
144.64738 23.13064 -40.53168
244.26259 67.13464 -51.0654
144.64968 -65.94874 36.17572
244.26407 -77.63749 46.41944

如何获取"vertex"之后的所有数字?

如果您的正则表达式风格支持 \G 元字符,请尝试:

(?<=vertex\s)-?\d*\.?\d+|(?<=\G\s)-?\d*\.?\d+

DEMO

  • (?<=vertex\s)-?\d*\.?\d+ - 涡旋词和 space 的正后视,后跟数字,
  • | - 或
  • (?<=\G\s)-?\d*\.?\d+* - 前一场比赛的正面回顾,后跟数字

另一种方法是匹配所有数字:

(?<=vertex)(?:\s?-?\d*\.?\d+)+

DEMO

然后用 \s

拆分匹配的字符串