1.对于带分数进行的转化
import re
question = '3(1/2)'
question = re.sub('(\d+)\((\d+/\d+)\)','(\\1+\\2)',question)
print('question = ')
print(question)
输出的对应结果为
question =
(3+1/2)
这里的(\d+)对应前面的数值3,(对应3后面的左括号
序列 '\\' 匹配 "\",而 '\(' 则匹配 "(",'\)'匹配")"
接下来对应的(\d+ / \d+)匹配相应的分数1/2,最后一个)匹配对应的右括号
而这里的\1,\2对应未转义的括号内容,\1对应(\d+),\2对应(\d+ / \d+)
综上,最终3(1/2)匹配的结果为(3+1/2)
2.没有加号的时候加上加号的情况
equation = '38(1/2)'
equation = re.sub('(\d+)\(', '\\1+(', equation)
print('equation = ')
print(equation)
输出的对应结果为
38+(1/2)
如果换成另外一种情况
equation = '(38(1/2))'
equation = re.sub('(\d+)\(', '\\1+(', equation)
print('equation = ')
print(equation)
输出的对应结果为:
(38+(1/2))
这里面的(\d+)对应数字38,(对应后面的(
也就是说如果遇到数字后面紧跟括号的情况,将对应内容拆分成为数字+(这样一个形式
3.有括号的分数去除相应的括号操作
对于相应的分数去括号的操作
question = re.sub('\((\d+/\d+)\)', '\\1', question)
这里前面的(代表着(,后面的)代表着),所以这里的\1其实是中间的(\d+/\d+)部分的元素,相当于去除括号的操作。
4.对于百分数的处理
首先总结一下正则表达式(括号)、[中括号]、{大括号}使用的区别
()是为了提取匹配的字符串,表达式中有几个()就有几个相应的匹配字符串。
(\s*)表示连续空格的字符串。
[]是定义匹配的字符范围。比如[a-zA-Z0-9]表示相应位置的字符要匹配的英文字符和数字。
[\s*]表示空格或者号内容。
{}一般用来表示匹配的长度,比如\s{3}表示匹配三个空格,\s{1,3}表示匹配一到三个空格。
(
0
−
9
)
(0-9)
(0−9)匹配’0-9’本身,
[
0
−
9
]
∗
[0-9]*
[0−9]∗匹配数字(注意后面有,可以为空),[0-9]+匹配数字(注意后面有+,不可以为空),{1-9}写法错误。
[0-9]{0,9}表示长度为0到9的数字字符串。
上面部分转载为博客园之中的内容,对应网址:博客园正则表达式内容讲解
所以处理百分数对应的语句如下:
equation = re.sub('([\.\d]+)%', '(\\1/100)', equation)
这里中括号之中的[.\d]为小数点或者数字,后面跟上一个%代表百分之内容
所以当遇到[.\d]+的内容的时候,为多个小数点和数字,此时后面若有%转化为
/100的操作。
try:
if is_equal(eval(equation), eval(answer)):
D.append((question, remove_bucket(equation), answer))
except:
continue