正则表达式:在某些模式之后匹配模式

时间:2019-02-26 14:43:33

标签: regex

我有字符串:

Word AB70 60.1 Another
Word AB70 60 Another
Word AB70 D65.1 Another
Word AB70(-20) D65.1 Another
Word AB-70 D65.1 Another

我需要获取没有D字母的60.16065.1(字母可以是任意字母)

我的想法是关于正则表达式的

AB-?\d+(?:\(-?\d+\))?\K\d+(?:\.\d+)

我当时想的是找到AB70,忘记它并与\d+(?:\.\d+)进行下一场比赛

但是它不起作用...我做错了什么?

2 个答案:

答案 0 :(得分:1)

您没有考虑空格和字母:

AB-?\d+(?:\(-?\d+\))?\s*[A-Za-z]*\K\d+(?:\.\d+)?

请参见regex demo

详细信息

  • AB-一个AB字符序列
  • -?\d+(?:\(-?\d+\))?-可选的-,1个以上的数字,然后是可选的(序列,可选的-,1个以上的数字和)字符
  • \s*-超过0个空格
  • [A-Za-z]*-0个或更多字母
  • \K-匹配重置运算符
  • \d+-1个以上数字
  • (?:\.\d+)?-由.和其后1个数字组成的可选序列。

答案 1 :(得分:0)

(?:)代表正则表达式中的非捕获组,因此您不会与\d+(?:\.\d+)

进行下一个匹配

假设您要匹配的模式始终以AB开头,则下面的正则表达式应该起作用。它寻找AB,然后是任意数量的非空白,非数字字符。捕获组捕获0个或多个数字字符,可以选择带小数点,后跟0个或多个数字。

AB\S*\D*(\d*\.?\d*)