Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式:在表达式中提取数字_Regex_Python 3.x - Fatal编程技术网

Regex 正则表达式:在表达式中提取数字

Regex 正则表达式:在表达式中提取数字,regex,python-3.x,Regex,Python 3.x,假设我有以下表达式: "1+3x+52-9-45x+x" 我的目标是提取所有常量: [1,+52,-9] 我尝试过使用Python: re.findall("[+-]?\d+","1+3x+52-9-45x+x") 结果是: [1'、'+3'、'+52'、'-9'、'-45'] 这是不正确的,因为还提取了x的系数 我还尝试: re.findall("[+-]?\d+[+-]?","1+3x+52-9-45x+x") 但是仍然不起作用。试试这个正则表达式: (?:[+-])?\b\d+\b

假设我有以下表达式:

"1+3x+52-9-45x+x"
我的目标是提取所有常量: [1,+52,-9]

我尝试过使用Python:

re.findall("[+-]?\d+","1+3x+52-9-45x+x")
结果是:

[1'、'+3'、'+52'、'-9'、'-45']

这是不正确的,因为还提取了x的系数

我还尝试:

re.findall("[+-]?\d+[+-]?","1+3x+52-9-45x+x")
但是仍然不起作用。

试试这个正则表达式:

(?:[+-])?\b\d+\b

解释(对于第一个正则表达式):

  • (?:[+-])
    匹配
    +
    -
    (如果需要,请添加更多运算符)
  • 使
    +
    -
    可选
  • \b\d+\b
    在两个非单词之间匹配一个或多个数字(因此不包括系数)
解释(对于第二个正则表达式):

  • (?:[+-])
    匹配
    +
    -
    (如果需要,请添加更多运算符)
  • 使
    +
    -
    可选
  • \d+(?=[+-])
    匹配一个或多个数字(贪婪),后面紧跟一个
    +
    -
    或一个空格,或者如果它是行尾。如果需要,可以添加更多运算符

sampe输入中的“-3”在哪里?为什么不期望“-9”?我尝试了:re.findall(((?:[+-])?\b\d+\b”,“1+3x+52-9-45x+x”)。但是空了。我在这里遗漏了什么吗?我知道了。不要忘记在模式之前使用原始字符串标记“r”。关于findall(r“(?:[+-])?\b\d+\b”,“1+3x+52-9-45x+x”)。这很管用
(?:[+-])?\d+(?=[\s+-]|$)