python怎么匹配字符串_python正则表达式如何匹配字符串

python怎么匹配字符串_python正则表达式如何匹配字符串python 正则表达式匹配字符串的方法 1 使用 这个正则表达式来提取单个位置的字符串 2 使用 P 这个正则表达式 匹配连续多个位置的字符串 python 正则表达式匹配字符串的方法 一 单个位置的字符串提取这种情况我们可以使用 这个正则表达式来提取 举例 一个字符串 a123b 如果我们想提取 ab 之间的值 123 可以使用 findall 配合正则表达式 这样会返回一个

python正则表达式匹配字符串的方法:1、使用【(.+?)】这个正则表达式来提取单个位置的字符串;2、使用【(?P…)】这个正则表达式【匹配连续多个位置的字符串。

8e9aa93aa4c6455f2d2cbfe4f9745a7a.png

python正则表达式匹配字符串的方法:

一、单个位置的字符串提取

这种情况我们可以使用(.+?)这个正则表达式来提取。 举例,一个字符串”a123b”,如果我们想提取ab之间的值123,可以使用findall配合正则表达式,这样会返回一个包含所以符合情况的list。

代码如下:import re

str = “a123b”

print re.findall(r”a(.+?)b”,str)#

输出[‘123’]

1.1贪婪和非贪婪匹配

如果我们有一个字符串”a123b456b”,如果我们想匹配a和最后一个b之间的所有值而非a和第一个出现的b之间的值,可以用?来控制正则贪婪和非贪婪匹配的情况。

代码如下:import re

str = “a123b456b”

print re.findall(r”a(.+?)b”, str)

#输出[‘123’]#?控制只匹配0或1个,所以只会输出和最近的b之间的匹配情况

print re.findall(r”a(.+)b”, str)

#输出[‘123b456’]

print re.findall(r”a(.*)b”, str)

#输出[‘123b456’]

1.2多行匹配

如果你要多行匹配,那么需要加上re.S和re.M标志. 加上re.S后。将会匹配换行符,默认.不会匹配换行符。

代码如下:str = “a23b\na34b”

re.findall(r”a(\d+)b.+a(\d+)b”, str)

#输出[]

#因为不能处理str中间有\n换行的情况

re.findall(r”a(\d+)b.+a(\d+)b”, str, re.S)

#s输出[(’23’, ’34’)]

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

代码如下:str = “a23b\na34b”

re.findall(r”^a(\d+)b”, str)

#输出[’23’]

re.findall(r”^a(\d+)b”, str, re.M)

#输出[’23’, ’34’]

二、连续多个位置的字符串提取

这种情况我们可以使用(?P…)这个正则表达式来提取。举例,如果我们有一行webserver的access日志:’192.168.0.1 25/Oct/2012:14:46:34 “GET /api HTTP/1.1” 200 44 “http://abc.com/search” “Mozilla/5.0″‘,我们想提取这行日志里面所有的内容,可以写多个(?Pexpr)来提取,其中name可以更改为你为该位置字符串命名的变量,expr改成提取位置的正则即可。

代码如下:import re

line =’192.168.0.1 25/Oct/2012:14:46:34 “GET /api HTTP/1.1” 200 44 “http://abc.com/search”

“Mozilla/5.0″‘

reg = re.compile(‘^(?P[^ ]*) (?P[^ ]*) “(?P[^”]*)”

(?P[^ ]*) (?P[^ ]*) “(?P[^”]*)” “(?P[^”]*)”‘)

regMatch = reg.match(line)

linebits = regMatch.groupdict()

print linebits

for k, v in linebits.items() :

print k+”: “+v

输出的结果为:status: 200

referrer:

request: GET /api HTTP/1.1

user_agent: Mozilla/5.0

date: 25/Oct/2012:14:46:34size: 44

remote_ip: 192.168.0.1

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233154.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PAI里field module的on input和on request区别

    PAI里field module的on input和on request区别

    2021年8月27日
    58
  • 系统可用性「建议收藏」

    系统可用性「建议收藏」一个网站、系统的战术包括可用性战术、可修改性战术、性能战术、安全性战术、可测试性战术、易用性战术。质量需求指定了软件的响应,以实现业务目标,战术是影响质量属性响应的设计决策,构架策略是战术的集合,构架

    2022年6月30日
    21
  • Flowable深入浅出-1 Flowable简介

    Flowable深入浅出-1 Flowable简介1Flowable简介什么是BPMN什么是FlowableFlowable官网、开源社区Flowable流程示例什么是BPMN先来看下百度百科的定义:由BPMI(TheBusinessProcessManagementInitiative)开发了一套标准叫业务流程建模符号(BPMN-BusinessProcessModelingNotation)。在BPMINotat…

    2022年5月21日
    105
  • vue相比jquery_angular和vue哪个厉害

    vue相比jquery_angular和vue哪个厉害jQuery到Vue的转变是一个思想的转变,将原有的直接操作dom的思想转变到操作数据上前言:很多人说jquey和vue没有什么可比的,应该和Angular,React来比吧,我到觉得他们倒没有多大的可比性,都是基于mvvm思想设计的框架,无非就是实现的方式不一样,在不同场景下性能上会有一些差异。然而从jquery到vue或者说是到mvvm的转变则是一个思想想的转变,是将原有的直接操作dom的思想转变到操作数据上去,难道不是一个根本性的改变吗?jquery介绍:想必大家都用过jquery吧,这个曾经.

    2022年10月15日
    3
  • MemoryBarrier方法[通俗易懂]

    MemoryBarrier方法[通俗易懂]查了下MSDN的解释:MemoryBarrierisrequiredonlyonmultiprocessorsystemswithweakmemoryordering(forexample,asystememployingmultipleIntelItaniumprocessors).Syn…

    2022年7月12日
    16
  • QTreeView样式[通俗易懂]

    QTreeView样式[通俗易懂]1、无样式2、设置被选中节点的字体颜色和背景颜色QTreeView::item:selected{color:#E7ECF0;background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0#667481,stop:1#566373);}3、设置悬浮节点的字体颜色和背景颜色QTreeView::item:hover{color:#ffffff;background:#ff0000;}4、设置节点的上下左右的内

    2022年5月29日
    339

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号