正则表达式是一个特殊的字符序列(也可以理解为匹配模式)
它可以帮助方便地检查文本是否与该模式匹配。
匹配的信息包括匹配的子串、分组和在本文中的索引等等。
在python中所有正则表达式的函数都在模块re中,有很多与字符串操作类似的函数。
放一些在ECNU Online Judge上能用re处理的例题(后续遇到了再更新~)
传送门: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
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输出。
传送门: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]))
传送门: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