Python 字符串重新填充 重新导入 s=“afd[asd]12[a34][43]tt[+12]xxx” nums=[r'[^\w]\d+',s]中s的int(s)] 打印(nums) ---- 进口稀土 括号中的def整数: nums=[r'[^\w]\d+',s]中s的int(s)] 打印(nums) def main(): 打印(括号中的整数(“afd[asd][12][a34][43]tt[+12]xxx”)) 如果名称=“\uuuuu main\uuuuuuuu”: main()

Python 字符串重新填充 重新导入 s=“afd[asd]12[a34][43]tt[+12]xxx” nums=[r'[^\w]\d+',s]中s的int(s)] 打印(nums) ---- 进口稀土 括号中的def整数: nums=[r'[^\w]\d+',s]中s的int(s)] 打印(nums) def main(): 打印(括号中的整数(“afd[asd][12][a34][43]tt[+12]xxx”)) 如果名称=“\uuuuu main\uuuuuuuu”: main(),python,valueerror,findall,Python,Valueerror,Findall,当我将int()拆分为2个函数时,为什么会导致“ValueError:invalid literal for int(),以10为基数:“[12]”呢?您的正则表达式也会匹配数字之前的字符-即,[^\w]将匹配非数字字符 您应该只捕获数字组件-使用括号 试试这个: nums = [int(s) for s in re.findall(r'[^\w](\d+)', s)] 当我将int()除以2个函数时,为什么会导致“ValueError:invalid literal for int(),以1

当我将int()拆分为2个函数时,为什么会导致“ValueError:invalid literal for int(),以10为基数:“[12]”呢?

您的正则表达式也会匹配数字之前的字符-即,
[^\w]
将匹配非数字字符

您应该只捕获数字组件-使用括号

试试这个:

nums = [int(s) for s in re.findall(r'[^\w](\d+)', s)]
当我将int()除以2个函数时,为什么会导致“ValueError:invalid literal for int(),以10为基数:'[12'”

因为您不只是将代码重构为两个函数,所以输入是不同的

起初,您的输入是“afd[asd]12[a34][43]tt[+12]xxx”

接下来,您的输入是“afd[asd][12][a34][43]tt[+12]xxx”


您的第二个输入有方括号和一个环绕第一个“12”的空格。如果输入中的更改是有意的,那么这就是修复您的正则表达式的问题(但我不能这样做,因为我不能说出正则表达式的意图或可能的输入).

请修正你问题中的缩进。谢谢,这几乎有效!我还需要负值。我应该添加什么,以便-43不会变为43?使
-