正则表达式:删除针头前的所有字符或数字

时间:2019-02-12 15:56:11

标签: regex

我将要构建一个正则表达式模式,以从未知的字符串中提取数字,并且每次可能都不同。

因为我的字符串看起来始终是未知的,所以这里有一些常见示例:

  1. 12厘米iamtext 311
  2. iamtext 311 12厘米iamtext 311
  3. iamtext 311 12cm

总结:我的目标是cmcm(空格)之前的数字。此模式可能会显示不确定数量的数字。因此,它也可能类似于12414 cm。在这种情况下,我想获取12414

但是如果有类似iamtext311 cm的东西,我不想找回,因为在这种情况下,数字属于文本。但是,如果数字和文本之间有空格,我想得到311

这是我到目前为止得到的:

.*?\d+.*?(\d+)

但这不适用于字符..我现在不知道如何处理..因为这是一个非常复杂的情况,尤其是在所有带有和没有空格的情况下……

将感谢您的任何帮助!

3 个答案:

答案 0 :(得分:2)

使用\b和可选的space字符怎么办?

\b\d+\s?cm\b

演示: https://regex101.com/r/fsp3FS/10

答案 1 :(得分:1)

在您的模式.*?\d+.*?(\d+)中,您没有考虑cm部分。

您可能要做的是断言字符串的开头或将空格字符匹配1+倍并使用捕获组作为数字。

为防止cm成为较长单词的一部分,您可以添加单词边界\b

(?:^|\s+)(\d+) ?cm\b

regex101 demo

如果您不想使用\s+来匹配换行符,则可以使用字符类来匹配空格和/或制表符[ \t]

答案 2 :(得分:1)

拆分问题。

  • 该数字是通过明显的\d+获得的。
  • 除了空格字符:(?<!\S),您不希望在其后加上任何字符。
  • 必须后面跟一个可选空格,然后是字符cm(?=\s?cm)

将它们放在一起:(?<!\S)\d+(?=\s?cm)

Demo

相关问题