作为标题,我应该从字符串中得到一些子字符串,如下所示:“ - 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")]
通常,您的代码应该处理任何运算符+, - ,*和/。 注意:运算符模块为两个参数函数等价的算术运算 (和其他)运营商
我的问题是如何只使用一个正则表达式来执行此操作。我想过让子字符串包含数字并停在任何不是数字的字符上,但这会错过中间的操作符。另一个想法是包括所有运算符(+ - * /)并在空格处停止,但这将使第一个和最后两个数字变为一起。任何人都可以给我一个方向,如何只用一个正则表达式模式解决这个问题?非常感谢!
答案 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*\/
- 匹配空格后跟/
(\d+)
- 匹配1位以上的数字并将其捕获到第5组