我现在使用这个正则表达式:
(\d+)
我可以得到两个字符串的问题:“2112343和很多4.99”
或
“4.99和很多2112343“我从两个人那里得到了这个:
[2112343, 4, 99]
我只需要得到2112343.我怎么能做到这一点?
f1tvaqid1#
使用lookaround,您可以将捕获限制为仅捕获未被其他数字或小数点包围的数字:
(?<![0-9.])(\d+)(?![0-9.])
或者,如果您只想匹配独立的数字(例如,如果你不想匹配abc123def中的123):
abc123def
(?<!\S)\d+(?!\S)
doinxwow2#
试试这个
这将只匹配整数
mzaanser3#
如果我理解正确的话,您也希望将这些数字与内部的点进行匹配,但不希望在结果集合中包含这些数字。我将通过两个步骤来实现这一点,首先选择所有数字,包括那些带有点的数字:
(\d+(?:\.\d+)*)
然后过滤掉所有不纯粹是数字的东西,使用第一个正则表达式并将其应用于第一步得到的集合中的每一项:
3lxsmp7m4#
正如我在评论中所说:
(?:^| )(\d+)(?:$| )
它将匹配所有完全由数字组成的“单词”(单词是由空格字符和/或字符串的开头/结尾包围的非空格字符串)。
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。这些模式可以有更多的变化,只要确保您匹配正确的“独立”含义。
(?<!\d)\d+(?!\d)
\d+
(?<!\d)\d{4}(?!\d)
\b\d+\b
(?<!\d\.)(?<!\d)\d+(?!\.?\d)
^\d+$
pbpqsu0x6#
(?<![0-9.])\d+(?![0-9.])
它使用的模式
(?<!prefix)position(?!suffix)
其中(?<!prefix)position表示:匹配位置不跟随前缀。position(?!suffix)表示:匹配位置不在后缀之前。[0-9.]表示:任何数字或小数点。
(?<!prefix)position
position(?!suffix)
[0-9.]
kqlmhetl7#
>>>r = re.match("\d+", "23423 in 3.4") >>>r.group(0) '23423'
7条答案
按热度按时间f1tvaqid1#
使用lookaround,您可以将捕获限制为仅捕获未被其他数字或小数点包围的数字:
或者,如果您只想匹配独立的数字(例如,如果你不想匹配
abc123def
中的123):doinxwow2#
试试这个
这将只匹配整数
mzaanser3#
如果我理解正确的话,您也希望将这些数字与内部的点进行匹配,但不希望在结果集合中包含这些数字。
我将通过两个步骤来实现这一点,首先选择所有数字,包括那些带有点的数字:
然后过滤掉所有不纯粹是数字的东西,使用第一个正则表达式并将其应用于第一步得到的集合中的每一项:
3lxsmp7m4#
正如我在评论中所说:
它将匹配所有完全由数字组成的“单词”(单词是由空格字符和/或字符串的开头/结尾包围的非空格字符串)。
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。这些模式可以有更多的变化,只要确保您匹配正确的“独立”含义。
pbpqsu0x6#
试试这个
它使用的模式
其中
(?<!prefix)position
表示:匹配位置不跟随前缀。position(?!suffix)
表示:匹配位置不在后缀之前。[0-9.]
表示:任何数字或小数点。kqlmhetl7#