字符串处理神器——Python Regular Expression
2018-01-26 09:44
393 查看
正则表达式是一个特殊的字符序列(也可以理解为匹配模式)
它可以帮助方便地检查文本是否与该模式匹配。
匹配的信息包括匹配的子串、分组和在本文中的索引等等。
在python中所有正则表达式的函数都在模块re中,有很多与字符串操作类似的函数。
放一些在ECNU Online Judge上能用re处理的例题(后续遇到了再更新~)
除了预处理+stringstream的标准做法之外,使用re.split有奇效
这题的大致思路是:用标点和空格分割字符,filter过滤后用set去重,最后排序
Tips:当输出要求各个数字/字符串用空格隔开时(有的还要求没有行末空格)
python的常规输出会很麻烦。
一个解决的办法是将存放输出结果的list转成str类型(lambda一下)
然后像上面代码一样join输出。
这题用python做直接解决了高精度问题,需要做的就是利用re.split将a和b提取出。
题意就是给定一个模式串和若干文本串,问文本串是否和模式匹配。
上来用re直接search,WA了几发以后发现了问题所在:
python自带的正则表达式系统在文本串和模式串过长的情况下会抛出OverFlowError
当数据过大搜索持续的时候会RE(出题人硬要卡Python咯?)
所以可以改成一旦catch到Error就认为匹配失败就蜜汁AC了(雾)
它可以帮助方便地检查文本是否与该模式匹配。
匹配的信息包括匹配的子串、分组和在本文中的索引等等。
在python中所有正则表达式的函数都在模块re中,有很多与字符串操作类似的函数。
放一些在ECNU Online Judge上能用re处理的例题(后续遇到了再更新~)
1、EOJ 2897 英文缩写词
传送门:http://acm.ecnu.edu.cn/problem/2897/除了预处理+stringstream的标准做法之外,使用re.split有奇效
import re del_word = ["THE", "AN", "A", "OF", "FOR", "AND"] while True: try: for word in re.split(r"[ -]", input().upper()): if not (word in del_word): print(word[0], end = '') print('') except: break
2、EOJ 3124 英文缩写词
传送门:http://acm.ecnu.edu.cn/problem/3124/这题的大致思路是:用标点和空格分割字符,filter过滤后用set去重,最后排序
import re cas = int(input()) for t in range(cas): s = input() print("case #%d:" %t) lis = list(set(filter(lambda x: x, re.split(r'[,.!? ]+', s)))) lis.sort() print(' '.join(lis))
Tips:当输出要求各个数字/字符串用空格隔开时(有的还要求没有行末空格)
python的常规输出会很麻烦。
一个解决的办法是将存放输出结果的list转成str类型(lambda一下)
然后像上面代码一样join输出。
3、EOJ 3143 纯虚数的幂
传送门:http://acm.ecnu.edu.cn/problem/3143/这题用python做直接解决了高精度问题,需要做的就是利用re.split将a和b提取出。
from re import split cas = int(input()) for t in range(cas): a, b = map(int, split(r"[j ]+", input())) s = str(a ** b) dic = {0: s, 1:s+'j', 2:'-'+s, 3:'-'+s+'j'} print("case #%d:\n%s" %(t, dic[b%4]))
4、EOJ 2959 正则表达式简化版
传送门:http://acm.ecnu.edu.cn/problem/2959/题意就是给定一个模式串和若干文本串,问文本串是否和模式匹配。
上来用re直接search,WA了几发以后发现了问题所在:
python自带的正则表达式系统在文本串和模式串过长的情况下会抛出OverFlowError
当数据过大搜索持续的时候会RE(出题人硬要卡Python咯?)
所以可以改成一旦catch到Error就认为匹配失败就蜜汁AC了(雾)
from re import search while True: try: s = input() while True: try: text = input() if text == '0': break m = search(s, text) print('Regular Expression is Fun!') if m else print('Boring String Matching...') except OverflowError: print('Boring String Matching...') except: break
相关文章推荐
- python 字符串处理函数
- Python中字符串处理函数里有三个去空格的函数
- Python中处理字符串的相关的len()方法的使用简介
- Python2 处理 Unicode 字符串的规则
- Python内置的字符串处理函数整理
- python-字符串处理-去除首尾特定字符
- python处理字符串编码
- Python常用的字符串处理函数
- Python3 使用 unicode-escape 处理 unicode 16进制字符串编解码问题
- python mysql 插入特殊字符串处理
- Python总结:字符串处理
- python字符串处理rstrip()、lstrip()、strip()函数使用
- Python内置的字符串处理函数
- Python字符串处理
- 大数据处理神器map-reduce实现(仅python和shell版本)
- python编码处理:unicode字节串转成中文 各种字符串举例说明
- Python 中的字符串处理函数
- Python的字符串处理方法
- Python内置的字符串处理函数整理
- python字符串、字符串处理函数及字符串相关操作