关于正则表达式

提取一个字符串中第二个句号之前的部分

一个同学提出的问题。
比如对于:

‘System.Exception: Task failed while transcoding the video. Segment: e2eba80e-6ce4-4e47-98f6-fd26f6afd4a6_3; Message: FFMPEG stopped process for this segment, but no output file exists.

那么需要提取的结果是

System.Exception: Task failed while transcoding the video.

实现脚本:

1
2
3
4
5
6
7
8
s = 'System.Exception: Task failed while transcoding the video. Segment: e2eba80e-6ce4-4e47-98f6-fd26f6afd4a6_3; Message: FFMPEG stopped process for this segment, but no output file exists.'

#print '.'.join(s.split('.')[:2])+'.' #其实用split也很好实现,不一定要用复杂的re

import re
m = re.match(r'(.+?\..+?\.)', s) #re的思路:从开头用非贪心的方法匹配两个句号之前的内容
if m:
print m.group(1)

其实在编写re时候我一般会写成r'([\s\S]+?\.[\s\S]+?\.),也就是用[\s\S]来代替.,原因是为了可读性——避免一堆.堆在一起的情况。

参考网页

http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

很久没有更新网站,发现多了不少评论和问题,无法一一回复,如果现在仍有问题请再次留言 :) 2016.03.29