Python 用于在括号内打印整数的正则表达式

Python 用于在括号内打印整数的正则表达式,python,regex,Python,Regex,虽然stackoverflow中已经有很多例子,但是第一次使用正则表达式却无法使其工作 如何提取括号内字符串中的整数 例如: dijdi[d43] d5[55++][ 43] [+32]dm dij [ -99]x 会回来吗 [43, 32, -99] + >代码>和 ->代码>是好的,如果它在括号的开头,但如果在中间或结尾,则不好。如果'+'符号位于开头,则不应将其考虑在内(+54-->54) 我一直在努力: re.findall('\[[-]?\d+\]',str)

虽然stackoverflow中已经有很多例子,但是第一次使用正则表达式却无法使其工作

如何提取括号内字符串中的整数

例如:

dijdi[d43]     d5[55++][ 43]  [+32]dm dij [    -99]x
会回来吗

[43, 32, -99]
<代码> + >代码>和<代码> ->代码>是好的,如果它在括号的开头,但如果在中间或结尾,则不好。如果
'+'
符号位于开头,则不应将其考虑在内<代码>(+54-->54)

我一直在努力:

re.findall('\[[-]?\d+\]',str)

但是它没有按我想要的方式工作。

如果您需要在
[+-34]
中失败匹配(即,如果前面有一个
+
则不需要提取负数),则需要使用

\[\s*(?:\+|(-))?(\d+)\s*]
当获得匹配时,计算组1和组2的值。看

详细信息

  • \[
    -a
    [
    字符
  • \s*
    -0+空格
  • \+?
    -可选的
    +
    字符
  • (?\d+)
    -捕获组1(
    re.findall
    的实际输出):可选的
    -
    和1+个数字
  • \s*
    -0+空格
  • ]
    -一个
    ]
    字符
在Python中

import re
text = "dijdi[d43]     d5[55++][ 43]  [+32]dm dij [    -99]x"
numbers_text = [f"{x}{y}" for x, y in re.findall(r'\[\s*(?:\+|(-))?(\d+)\s*]', text)]
numbers = list(map(int, numbers_text))

# => [43, 32, -99] for both

如果需要在
[+-34]
中使匹配失败(即,如果前面有一个
+
,则不需要提取负数),则需要使用

\[\s*(?:\+|(-))?(\d+)\s*]
当获得匹配时,计算组1和组2的值。看

详细信息

  • \[
    -a
    [
    字符
  • \s*
    -0+空格
  • \+?
    -可选的
    +
    字符
  • (?\d+)
    -捕获组1(
    re.findall
    的实际输出):可选的
    -
    和1+个数字
  • \s*
    -0+空格
  • ]
    -一个
    ]
    字符
在Python中

import re
text = "dijdi[d43]     d5[55++][ 43]  [+32]dm dij [    -99]x"
numbers_text = [f"{x}{y}" for x, y in re.findall(r'\[\s*(?:\+|(-))?(\d+)\s*]', text)]
numbers = list(map(int, numbers_text))

# => [43, 32, -99] for both

如果要从字符串中提取整数,我使用的代码如下:

def stringToNumber(inputStr):
myNumberList = []
for s in inputStr.split():
    newString = ''.join(i for i in s if i.isdigit())
    if (len(newString) != 0):
        myNumberList.append(newString)
return myNumberList

我希望它对您有用。

如果您想从字符串中提取整数,我使用的代码如下:

def stringToNumber(inputStr):
myNumberList = []
for s in inputStr.split():
    newString = ''.join(i for i in s if i.isdigit())
    if (len(newString) != 0):
        myNumberList.append(newString)
return myNumberList

我希望它对您有用。

如果您还没有这样做,我建议您切换到。在这里将其与
regex.findall
和下面的正则表达式一起使用,可以提取所需的内容

r'\[ *\+?\K-?\d+(?= *\])'

在regex测试仪上,将光标传递到regex上,以获取有关单个令牌的详细信息

正则表达式引擎执行以下操作

\[       : match '['
\ *      : match 0+ spaces
\+?      : optionally match '+'
\K       : forget everything matched so far and reset
           start of match to current position
-?       : optionally match '-'
\d+      : match 1+ digits
(?= *\]) : use positive lookahead to assert the last digit
         : matched is followed by 0+ spaces then ']' 

如果您还没有这样做,我建议您切换到。在这里将其与
regex.findall
和下面的正则表达式一起使用,可以提取所需的内容

r'\[ *\+?\K-?\d+(?= *\])'

在regex测试仪上,将光标传递到regex上,以获取有关单个令牌的详细信息

正则表达式引擎执行以下操作

\[       : match '['
\ *      : match 0+ spaces
\+?      : optionally match '+'
\K       : forget everything matched so far and reset
           start of match to current position
-?       : optionally match '-'
\d+      : match 1+ digits
(?= *\]) : use positive lookahead to assert the last digit
         : matched is followed by 0+ spaces then ']' 

也许
\[\s*\+?(?\d+\s*]
?当然,要让它工作,你必须跳出“]。@ruud
[
被跳出,格式没有显示它可能有像
[+-33]
[-+44]
这样的大小写,如果是这样,什么是例外的?也许
\[\s*+?(\d+\s*]
?当然要让它工作,你必须跳出“@ruud
[
被转义,格式没有显示它可能存在类似于
[+-33]
[-+44]
的情况,如果是这样,有什么例外?