独立号码Regex?

bzzcjhmw  于 9个月前  发布在  其他
关注(0)|答案(7)|浏览(76)

我现在使用这个正则表达式:

(\d+)

我可以得到两个字符串的问题:
“2112343和很多4.99”

“4.99和很多2112343“
我从两个人那里得到了这个:

[2112343, 4, 99]

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

f1tvaqid

f1tvaqid1#

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

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

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

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

doinxwow2#

试试这个

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

这将只匹配整数

mzaanser

mzaanser3#

如果我理解正确的话,您也希望将这些数字与内部的点进行匹配,但不希望在结果集合中包含这些数字。
我将通过两个步骤来实现这一点,首先选择所有数字,包括那些带有点的数字:

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

然后过滤掉所有不纯粹是数字的东西,使用第一个正则表达式并将其应用于第一步得到的集合中的每一项:

(\d+)
3lxsmp7m

3lxsmp7m4#

正如我在评论中所说:

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

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

thigvfpy

thigvfpy5#

问题总是在于“独立”意味着什么。这里有几个解决方案取决于这个意义。
1.匹配未包含其他数字的数字串:(?<!\d)\d+(?!\d)(注意,这等于\d+,但是当你只需要匹配四位数的字符串时,(?<!\d)\d{4}(?!\d)才有意义)。参见regex demo
1.匹配仅用空格括起或位于字符串开头/结尾的数字字符串:(?<!\S)\d+(?!\S)。参见regex demo
1.将数字字符串作为整个单词进行匹配:\b\d+\b(注意,word boundaries在很多上下文中匹配,并且也将匹配十进制数的部分)。参见regex demo
1.匹配整个整数,而不是小数的部分(假设使用点作为小数分隔符):(?<!\d\.)(?<!\d)\d+(?!\.?\d)。参见regex demo
1.仅匹配数字字符串:^\d+$。参见regex demo
这些模式可以有更多的变化,只要确保您匹配正确的“独立”含义。

pbpqsu0x

pbpqsu0x6#

试试这个

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

它使用的模式

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

其中(?<!prefix)position表示:匹配位置不跟随前缀。
position(?!suffix)表示:匹配位置不在后缀之前。
[0-9.]表示:任何数字或小数点。

kqlmhetl

kqlmhetl7#

>>>r = re.match("\d+", "23423 in 3.4")
>>>r.group(0)
'23423'

相关问题