1

我目前使用这个正则表达式:

(\d+)

我可以得到2个字符串的问题:

“2112343 和很多 4.99”

或者

“4.99 和很多 2112343”

我从两者中得到这个:

[2112343, 4, 99]

我只需要得到2112343 ......我怎样才能做到这一点?

4

6 回答 6

7

使用环视,您可以将捕获限制为仅不被其他数字或小数点包围的数字:

(?<![0-9.])(\d+)(?![0-9.])

或者,如果您只想匹配独立数字(例如,如果您不想匹配 123 in abc123def):

(?<!\S)\d+(?!\S)
于 2012-06-30T19:33:07.103 回答
1

试试这个

(?<!\S)\d+(?!\S)

这将只匹配整数

于 2012-06-30T19:33:30.260 回答
1

如果我理解正确,您也希望将这些数字与内部的一个点相匹配,但不希望将这些数字包含在结果集合中。

我会通过 2 个步骤来解决这个问题,首先选择所有数字,还有带点的数字:

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

然后过滤掉不是纯数字的所有内容,并使用您的第一个正则表达式并将其应用于第一步生成的集合的每个项目:

(\d+)
于 2012-06-30T19:34:07.547 回答
1

正如我在评论中发布的那样:

(?:^| )(\d+)(?:$| )

它将匹配完全由数字组成的所有“单词”(单词是由空格字符和/或字符串的开头/结尾包围的非空格字符的字符串。)

于 2012-06-30T19:45:06.763 回答
0

试试这个

(?<![0-9.])\d+(?![0-9.])

它使用模式

(?<!prefix)position(?!suffix)

其中(?<!prefix)position表示:匹配位置不跟随前缀。

position(?!suffix) 表示:匹配位置不位于前面的后缀。

finally[0-9.]表示:任何数字或小数点。

于 2012-06-30T19:57:09.173 回答
-1
>>>r = re.match("\d+", "23423 in 3.4")
>>>r.group(0)
'23423'
于 2012-06-30T19:36:57.653 回答