Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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
如何使用正则表达式从python中的字符串中提取不同类型的子字符串?_Python_Regex - Fatal编程技术网

如何使用正则表达式从python中的字符串中提取不同类型的子字符串?

如何使用正则表达式从python中的字符串中提取不同类型的子字符串?,python,regex,Python,Regex,作为标题,我应该从一个字符串中得到一些子字符串,它看起来像这样:“-23/45+14/9”。我需要从那个字符串中得到四个数和中间的操作符。让我困惑的是,如何只使用一个正则表达式模式来实现这一点。要求如下: 编写一个可用于提取的正则表达式patt (分子,分母,运算符,分子,分母) 来自包含分数、算术运算符和分数的字符串。你可以 假设算术运算符前后有一个空格,没有空格 在分数中围绕/字符。所有分数都有一个分子和 分母。 例如: 通常,您的代码应该处理任何运算符+、-、*和/。 注:运算符模块用于两

作为标题,我应该从一个字符串中得到一些子字符串,它看起来像这样:“-23/45+14/9”。我需要从那个字符串中得到四个数和中间的操作符。让我困惑的是,如何只使用一个正则表达式模式来实现这一点。要求如下:

编写一个可用于提取的正则表达式patt (分子,分母,运算符,分子,分母) 来自包含分数、算术运算符和分数的字符串。你可以 假设算术运算符前后有一个空格,没有空格 在分数中围绕/字符。所有分数都有一个分子和 分母。 例如:

通常,您的代码应该处理任何运算符+、-、*和/。 注:运算符模块用于两个参数函数的算术等价物 (及其他)营办商

我这里的问题是如何只使用一个正则表达式来实现这一点。我曾想过让子字符串包含数字,停在任何不是数字的字符上,但这会错过中间的操作符。另一个想法是包含所有运算符(+-*/),并在空白处停止,但这将使前两个数字和后两个数字合并在一起。谁能告诉我如何只用一个正则表达式模式来解决这个问题?非常感谢

试试这个正则表达式:

(-?\d+)\s*\/\s*(\d+) *([+*\/-])\s*(-?\d+)\s*\/(\d+)

您可以将所需信息从组1提取到组5

说明:

  • (?\d+)
    -匹配可选的
    -
    ,后跟1+个数字,并将其捕获到组1中
  • \s*\/\s*
    -匹配0+次出现的空白,然后是
    /
    ,然后是0+次出现的空白
  • (\d+)
    -匹配数字的1+次出现次数,并将其捕获到组2中
  • *
    -匹配0个以上的空格
  • ([+*\/-])
    -匹配
    +
    -
    /
    *
    中的一个运算符,并将其捕获到组3中
  • \s*
    -匹配0多次出现的空白
  • (?\d+)
    -匹配可选的
    -
    ,后跟1+个数字,并将其捕获到组4中
  • \s*\/
    -匹配0多次出现的空格,后跟
    /
  • (\d+)
    -匹配数字的1+次出现次数,并将其捕获到组5中

  • 正则表达式支持一个“或”运算符,所以<代码> a b>代码>匹配<代码> a <代码> >代码> b>代码>问题是,我只需要中间操作符,但不需要划分符号/谢谢SOOOO,这个问题困扰了我整整一个下午,现在我学到了一些新的东西……很高兴它起作用了。请考虑选择它作为答案,如果它解决了你的问题:
    (-?\d+)\s*\/\s*(\d+) *([+*\/-])\s*(-?\d+)\s*\/(\d+)