我有一个文字:
Wheels – F/R_ Schwalbe TABLE TOP/Schwalbe Black Jack 26x2.2
正则表达式从该字符串解析轮子大小:
/.*Wheels.*(\d*)x/
但它不起作用。此外,当我从正则表达式中删除星号时,我将数字6
作为群组匹配。
答案 0 :(得分:3)
您需要在数字lazy instead of greedy之前设置.*
:
/.*Wheels.*?(\d*)x/
.*
将贪婪地使用x
以外的所有内容,而不会为以下\d*
留下任何内容。由于*
可以有效匹配零个字符,因此\d*
的空匹配不是错误的结果。
通过添加?
来生成一个惰性.*?
表达式,它会尝试匹配尽可能少的字符,允许以下\d*
匹配{{1}之前的所有数字}}
答案 1 :(得分:2)
你需要让你的正则表达式非贪婪,因为.*
会消耗你的数字而\d*
意味着零或不匹配
.*Wheels.*?(\d*)x
.*?
表示尽可能多地匹配尽可能多的字符,以阻止.*
消耗您的数字
或者,如果Wheel
之后没有数字,并且您的所需值与后续正则表达式相同,则可以提高效率
其中[^\d]*
表示匹配除数字