我目前使用此正则表达式:
(\d+)
我可以获得2个字符串的问题:
“2112343和很多4.99”
或
“4.99和很多2112343”
我从两个人那里得到了这个:
[2112343, 4, 99]
我只需要 2112343 ... 我怎样才能做到这一点?
答案 0 :(得分:3)
使用环视,您可以将捕获限制为仅包含未被其他数字或小数点包围的数字:
(?<![0-9.])(\d+)(?![0-9.])
或者,如果您只想匹配独立号码(例如,如果您不想匹配abc123def
中的123):
(?<!\S)\d+(?!\S)
答案 1 :(得分:1)
如果我理解你的话,你也希望将这些数字与里面的一个数字进行匹配,但是不想在结果集合中使用这些数字。
我会通过两个步骤来解决这个问题,首先选择所有数字,也选择带点的数字:
(\d+(?:\.\d+)*)
然后过滤掉所有非纯数字的内容,并使用您的第一个正则表达式并将其应用于第一步中生成的集合的每个项目:
(\d+)
答案 2 :(得分:1)
正如我在评论中发表的那样:
(?:^| )(\d+)(?:$| )
它将匹配完全由数字组成的所有“单词”(单词是由空格字符和/或字符串的开头/结尾包围的非空格字符串。)
答案 3 :(得分:0)
试试这个
(?<!\S)\d+(?!\S)
这只会匹配整数
答案 4 :(得分:0)
试试这个
(?<![0-9.])\d+(?![0-9.])
它使用模式
(?<!prefix)position(?!suffix)
其中(?<!prefix)position
表示:匹配位置不在前缀之后。
和position(?!suffix)
表示:匹配位置不在后缀之前。
最后[0-9.]
表示:任何数字或小数点。
答案 5 :(得分:-1)
>>>r = re.match("\d+", "23423 in 3.4")
>>>r.group(0)
'23423'