博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则表达式
阅读量:2359 次
发布时间:2019-05-10

本文共 1781 字,大约阅读时间需要 5 分钟。

Emacs正则替换命令

M-x replace-regexp RET ?RET ? RET

 

 

最短匹配

From: http://blog.csdn.net/kowity/archive/2008/02/05/2084616.aspx

<script type="text/javascript"> </script> <script type="text/javascript"> </script>

有一次想用正则表达式从网页里面抓取一些东西出来,内容不复杂却出现不少问题。

如果内容是这样,想提取蓝色的部分:

<title a='ff33kie8' /> abcde

<title a='743u4343525fj' />

在 VIM 里面只要用 a='.*' 这样的正则式就可以选出来了。

但是我的要抓取的内容是下面这样,再用上面那个正则式就不行了。

<title a='ff33kie8'/> abcde <title a='sse3'/> abcdef <title a='hhs77565'/> abcdefg <title a='743u4343525fj' />

如果用正则式  a='.*'   的话,选取的部分就是如同上面蓝色的部分。这时候就得用“最短匹配”的方式才行。

<title a='ff33kie8' /> abcde <title a='sse3' /> abcdef <title a='hhs77565' /> abcdefg <title a='743u4343525fj' />

正则式为  a='./{-}' 才能符合我的要求,产生如上的结果。/{-} 这个符号就表示采用最短匹配的方式了。详情请看 VIM 正则表达式的帮助。

 

 

 

正则表达式中的字符:

^          匹配行首 $          匹配行尾 .          匹配任意单个字符 .*         匹配任意个字符 /<         匹配单词的开头 />         匹配单词的结尾 []         匹配[]中的任何一个字符,如[a-z]匹配任何一个小写字母

python非贪婪、多行匹配正则表达式例子

From: http://www.juyimeng.com/python-multi-line-non-greedy-regular-expression-sample.html

一些regular的tips:

1 非贪婪flag

>>>
re
.
findall
(
r
"
a(
/d
+?)
"
,
"
a23b
"
)
        
[
'
2
'
]
>>>
re
.
findall
(
r
"
a(
/d
+)
"
,
"
a23b
"
)
        
[
'
23
'
]

注意比较这种情况:

>>>
re
.
findall
(
r
"
a(
/d
+)b
"
,
"
a23b
"
)
        
[
'
23
'
]
>>>
re
.
findall
(
r
"
a(
/d
+?)b
"
,
"
a23b
"
)
        
[
'
23
'
]

2 如果你要多行匹配,那么加上re.S和re.M标志

re.S:.将会匹配换行符,默认.不会匹配换行符

>>>
re
.
findall
(
r
"
a(
/d
+)b.+a(
/d
+)b
"
,
"
a23b
/n
a34b
"
)
        
[]
>>>
re
.
findall
(
r
"
a(
/d
+)b.+a(
/d
+)b
"
,
"
a23b
/n
a34b
"
,
re
.
S
)
        
[(
'
23
'
,
'
34
'
)]
>>>

re.M:^$标志将会匹配每一行,默认^和$只会匹配第一行

>>>
re
.
findall
(
r
"
^a(
/d
+)b
"
,
"
a23b
/n
a34b
"
)
        
[
'
23
'
]
>>>
re
.
findall
(
r
"
^a(
/d
+)b
"
,
"
a23b
/n
a34b
"
,
re
.
M
)
        
[
'
23
'
,
'
34
'
]

但是,如果没有^标志,

>>>
re
.
findall
(
r
"
a(
/d
+)b
"
,
"
a23b
/n
a23b
"
)
        
[
'
23
'
,
'
23
'
]

可见,是无需re.M

 
你可能感兴趣的文章
CSDN10大博客栏目火热评选中
查看>>
敏捷开发团队管理系列之五:大型研发团队的切分(刚参加3.17 MDP团队管理场次的读者请看)
查看>>
敏捷开发免费管理工具——火星人预览之六:我的空间,我的通知
查看>>
敏捷开发一千零一问系列之十四:敏捷开发加班吗?
查看>>
jqueryui 1.8.19引用顺序(及var basePrototype = new base()错误)
查看>>
火星人敏捷开发手册2012-04-30新增敏捷日常跟进内容
查看>>
敏捷开发一千零一问系列之二十:怎样持续改进?(兼谈共振)
查看>>
敏捷开发一千零一问系列之二十一:外部教练还是外部教练?(敏捷开发改进的主体问题)
查看>>
【在线研讨】《敏捷开发用户故事分类与组织结构(一期)》2012-06-26(周二)
查看>>
《火星人开发纪实:敏捷开发一千零一夜》序言
查看>>
《火星人开发纪实:敏捷开发一千零一夜》第一个月:一个产品的诞生
查看>>
《火星人开发纪实:敏捷开发一千零一夜》第二个月:框架优先,还是故事群优先
查看>>
敏捷开发松结对编程系列之十:代码审查最佳实践
查看>>
免费敏捷开发管理工具:火星人
查看>>
火星人网站开通,开放注册中 http://www.scrum.org.cn/
查看>>
敏捷开发用户故事系列之八:剖析用户故事描述语法(兼谈不同种类故事的语法)
查看>>
敏捷开发用户故事系列之九:用户故事早期估算
查看>>
《火星人敏捷开发手册2012-08-15》版发布:用户故事分类及示例
查看>>
【在线研讨】《敏捷开发用户故事分类与组织结构(三期)》2012-08-28(周二)
查看>>
敏捷开发“松结对编程”系列之十:L型代码结构(技术篇之一)
查看>>