我将要构建一个正则表达式模式,以从未知的字符串中提取数字,并且每次可能都不同。
因为我的字符串看起来始终是未知的,所以这里有一些常见示例:
总结:我的目标是cm
或cm
(空格)之前的数字。此模式可能会显示不确定数量的数字。因此,它也可能类似于12414 cm
。在这种情况下,我想获取12414
。
但是如果有类似iamtext311 cm
的东西,我不想找回,因为在这种情况下,数字属于文本。但是,如果数字和文本之间有空格,我想得到311
。
这是我到目前为止得到的:
.*?\d+.*?(\d+)
但这不适用于字符..我现在不知道如何处理..因为这是一个非常复杂的情况,尤其是在所有带有和没有空格的情况下……>
将感谢您的任何帮助!
答案 0 :(得分:2)
答案 1 :(得分:1)
在您的模式.*?\d+.*?(\d+)
中,您没有考虑cm
部分。
您可能要做的是断言字符串的开头或将空格字符匹配1+倍并使用捕获组作为数字。
为防止cm成为较长单词的一部分,您可以添加单词边界\b
:
(?:^|\s+)(\d+) ?cm\b
如果您不想使用\s+
来匹配换行符,则可以使用字符类来匹配空格和/或制表符[ \t]
答案 2 :(得分:1)
拆分问题。
\d+
获得的。(?<!\S)
,您不希望在其后加上任何字符。cm
:(?=\s?cm)
。将它们放在一起:(?<!\S)\d+(?=\s?cm)
。
Demo。