整数和整数的正则表达式?

2024-06-08 15:22:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个字符串中检测出所有整数和整数(以及其他很多东西)。下面是我当前使用的正则表达式:

整数:r"[0-9]+"

整数:r"[+,-]?[0-9]+"

以下是问题:

  1. 整数正则表达式也在检测负数,这是我所不能拥有的。我该怎么解决?如果在正则表达式开始之前使用空格,则只会得到正数,但在输出开始时会得到空格!
  2. 对于整数,我想检测格式为+[0-9]的正数,但存储时不带符号。
  3. 对于整数,我想存储用符号检测到的任何正整数,而不管它是否出现在原始字符串中。

差不多完成了: 最后,我有一个字符串,上面写着“Add 10和-15”。我想把整数存储在一个列表中。我是用findall()来做的。存储数字时,可以将“10”存储为“+10”


Tags: 字符串add列表格式符号数字整数空格
2条回答

对于正整数,使用

r"(?<![-.])\b[0-9]+\b(?!\.[0-9])"

说明:

(?<![-.])   # Assert that the previous character isn't a minus sign or a dot.
\b          # Anchor the match to the start of a number.
[0-9]+      # Match a number.
\b          # Anchor the match to the end of the number.
(?!\.[0-9]) # Assert that no decimal part follows.

对于有符号/无符号整数,使用

r"[+-]?(?<!\.)\b[0-9]+\b(?!\.[0-9])"

单词边界\b对于确保整个数字匹配至关重要。

你差点就吃到了。

import re

regex = re.compile(r'(\d+)|([\+-]?\d+)')

s = "1 2 3 4 5 6 +1 +2 +3 -1 -2 -3 +654 -789 321"
for r in regex.findall(s):
    if r[0]:
        # whole (unsigned)
        print 'whole', r[0]
    elif r[1]:
        # a signed integer
        print 'signed', r[1]

结果:

>>> 
whole 1
whole 2
whole 3
whole 4
whole 5
whole 6
signed +1
signed +2
signed +3
signed -1
signed -2
signed -3
signed +654
signed -789
whole 321

或者,可以使用“或”以“更好”的方式获得实际结果:

print [r[0] or r[1] for r in regex.findall(s)]
>>> 
['1', '2', '3', '4', '5', '6', '+1', '+2', '+3', '-1', '-2', '-3', '+654', '-789', '321']

编辑: 根据你的问题“is it possible to store '10' as '+10'”:

import re

def _sign(num):
    if r[0]:
        return '+%s'%r[0]
    else:
        return r[1]

regex = re.compile(r'(\d+)|([\+-]?\d+)')
s = "1 2 3 4 5 6 +1 +2 +3 -1 -2 -3 +654 -789 321"      
print [_sign(r) for r in regex.findall(s)]
>>>
['+1', '+2', '+3', '+4', '+5', '+6', '+1', '+2', '+3', '-1', '-2', '-3', '+654', '-789', '+321']

或在一行中:

print ['+%s'%r[0] if r[0] else r[1] for r in regex.findall(s)]
>>> 
['+1', '+2', '+3', '+4', '+5', '+6', '+1', '+2', '+3', '-1', '-2', '-3', '+654', '-789', '+321']

相关问题 更多 >