我有字符串:
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.1
或60
或65.1
(字母可以是任意字母)
我的想法是关于正则表达式的
AB-?\d+(?:\(-?\d+\))?\K\d+(?:\.\d+)
我当时想的是找到AB70,忘记它并与\d+(?:\.\d+)
进行下一场比赛
但是它不起作用...我做错了什么?
答案 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*)