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

时间:2018-02-05 02:45:17

标签: python regex

作为标题,我应该从字符串中得到一些子字符串,如下所示:“ - 23/45 + 14/9”。我需要从该字符串中得到的是四个数字和中间的运算符。令我困惑的是,如何只使用一个正则表达式模式来执行此操作。以下是要求:

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

>>> s = "-23/45 + 14/9"
>>> re.findall(patt,s)
[( "-23","45","+","14","49")]
>>> s = "-23/45 * 14/9"
>>> re.findall(patt,s)
[( "-23","45","*","14","49")]

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

我的问题是如何只使用一个正则表达式来执行此操作。我想过让子字符串包含数字并停在任何不是数字的字符上,但这会错过中间的操作符。另一个想法是包括所有运算符(+ - * /)并在空格处停止,但这将使第一个和最后两个数字变为一起。任何人都可以给我一个方向,如何只用一个正则表达式模式解决这个问题?非常感谢!

1 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

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

<强> Click for regex Demo

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

<强>解释

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