常用的正则表达式讲解

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) (09)匹配’0-9’本身, [ 0 − 9 ] ∗ [0-9]* [09]匹配数字(注意后面有
,可以为空),[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

使用正则表达式匹配区,但是又不想匹配到新区、小区等一系列的区进行的正则表达式操作

import re
currentstr = '北京市海淀区门'
result = re.match(r'(.*?)[^东西南北新发小街]区[^域](.*)',currentstr)
print('result = ')
print(result)
print(result.group(2))

第一个中括号保证没有东西南北等一系列字眼,第二个括号保证没有区域
如果匹配A门的时候想要带上A,匹配如下

import re
currentstr = '北京市海淀A区门'
result = re.match(r'(.*?[A])区(.*)',currentstr)
print('result = ')
print(result)
print(result.group(1))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sure, 我可以根据您的要求提供一些有关Hive正则表达式的详细讲解。Hive是一个基于Hadoop的数据仓库,它允许我们对大型数据集进行管理、处理和查询。在Hive中,正则表达式是一种强大的工具,用于从复杂的文本数据中提取有用的信息。 在Hive中,我们使用正则表达式函数来匹配模式并返回结果。下面是一些常用正则表达式函数: 1. regexp_extract(string str, string pattern, int index): 该函数从字符串str中提取与模式匹配的子字符串,并返回指定索引的结果。例如,regexp_extract('hello world', 'hello(.*)', 1)将返回' world'。 2. regexp_replace(string str, string pattern, string replacement): 该函数将字符串str中与模式匹配的所有子字符串替换为replacement。例如,regexp_replace('hello world', 'hello', 'hi')将返回'hi world'。 3. rlike(string str, string pattern): 该函数返回一个布尔值,表示字符串str是否匹配模式pattern。例如,rlike('hello world', 'hello(.*)')将返回TRUE。 在Hive中,正则表达式的语法与Java中的相同。下面是一些常用正则表达式元字符和量词: 1. ^:匹配输入的开头。 2. $:匹配输入的结尾。 3. .:匹配除了换行符以外的任何单个字符。 4. *:匹配零个或多个在它前面的元字符。 5. +:匹配一个或多个在它前面的元字符。 6. ?:匹配零个或一个在它前面的元字符。 7. []:匹配中括号内的任意一个字符。 8. [^]:匹配不在中括号内的任意一个字符。 希望这些信息对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值