我有一个正则表达式字符串来抓取各种数字,但我注意到它还会抓取紧跟在文本后面的数字。
例如使用如下测试句子: 尼龙-12 的块为 1.23 x 4E-56 x -7.89 我想要提取1.23、4E-56和-7.89。我似乎还从尼龙-12 中抓取了-12 。
我对正则表达式语法还不熟悉,我应该如何开始我的表达式以确保它不会从单词中抓取数字。如果任何文本字符和数字字符之间有空格,那没问题,但是当没有空格(如尼龙 12 中)时,我不想捕获它们。
我用来抓取数字的正则表达式如下所示:
[+\-]?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+\-]?(?:0|[1-9]\d*)(?:\.\d+)?)?
使用regexper 的方式如下:
编辑:
这似乎是与 +/- 运算符搜索有关的问题。我尝试在开头放置\b并查看结果。
如果我将Nylon12,Nylon-13或Nylon+14放入正则表达式,它会返回-13和+14,而不是 12。
您可以使用所谓的“积极后视断言”来实现这一点。
原则上,您想要匹配以空格开头或位于字符串开头的数字。
在大多数正则表达式方言中,您可以使用以下语法:
后视断言有点令人困惑,因为它们不直接匹配输出中的字符。相反,它们断言匹配之前的字符应该匹配某种模式。有正向和负向版本(意味着前面的文本应该匹配或不应该匹配)。还有后视和前视版本(意味着应该检查匹配之前或之后的文本。)
这篇文章很好地解释了它们。
这是添加了断言的相同表达式:
我使用的后视模式是,
^|\s
这意味着匹配项应该位于输入的开头 (^
) 或任何空格 (\s
) 之前。您的示例没有显示它,但我假设在这种情况下:也
37
应该返回。该^
部分处理该问题,因为严格来说它前面没有空格。