如何用python 正则表达式 把一行中指定位置的字符取出来

2021-04-15 15:27发布

6条回答
IT学习
2楼 · 2021-04-16 09:51

用列表推导式来实现,供参考。
>>> raw_list = ['A_rig', 'B_obj', 'F_rig', 'H_obj', 'T_rig']
>>> new_list = [i for i in raw_list if '_obj' in i]
>>> print(new_list)
['B_obj', 'H_obj']

20200921文 - 做更棒的自己!
3楼 · 2021-04-16 15:09

python 根据正则表达式提取指定的内容
正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事。

下面演示了在python里,通过正则表达式来提取符合要求的内容。

实例代码:
import re#   正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事。# 下面演示了在python里,通过正则表达式来提取符合要求的内容。有几个要注意# 的地方就是:# [1] 要用()将需要的内容包含起来# [2] 编号为0的group是整个符合正则表达式的内容,编号为1的是第一个(及对应# 的)包含的内容# @param regex: regular expression, use () to group the result# 正则表达式,用()将要提取的内容包含起来# @param content: # @param index: start from 1, depends on the \p regex's ()# 从1开始,可以通过数(来得到,其中0是全部匹配# @return: the first match of the \p regex# 只返回第一次匹配的内容def extractData(regex, content, index=1): r = '0' p = re.compile(regex) m = p.search(content) if m: r = m.group(index) return r regex = r'第(.*)场雪'content = '2002年的第一场雪'index = 1print extractData(regex, content, index)

import re



pattern = re.compile(r'"key":"(.*?)"')


num1 = pattern.findall('repin_count":617, "is_private":0, "extra":null, "orig_source":null, "tags":[], "board":{"board_id":2681393, "user_id":977900, "title":"UI", "description":"", "category_id":"web_app_icon", "seq":1, "pin_count":782, "follow_count":9084, "like_count":27, "created_at":1350360763, "updated_at":1577953282, "deleting":0, "is_private":0, "extra":null, "key":"4af0f60602b02b587d21d470e54feb584b8a24259322-bYTJnQ","pins":[{"pin_id":814738561, "user_id":977900, "board_id":2681393, "file_id":103415954, "file":{"bucket":"hbimg", "key":"4af0f60602b02b587d21d470e54feb584b8a24259322-bYTJnQ", "type":"image/png", "height":600, "width":800, "frames":1, "theme":"001414"}, "media_type":0, "source":"dribbble.com", "link":"https://dribbble.com/shots/2724065-City-Sunset", "raw_text":"City Sunset", "key":"4af0f60602b02b587d21d470e54feb584b8a24259322-bYTJnQ",')


print(num1)


我想吃肉
5楼 · 2021-04-16 19:53

import re  def Find(string):    # findall() 查找匹配正则表达式的字符串    url = re.findall('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+', string)    return url       string = 'Runoob 的网页地址为:https://www.runoob.com,Google 的网页地址为:https://www.google.com'print("Urls: ", Find(string))

一个Ai
6楼 · 2021-04-19 08:44

1. 单个位置的字符串提取


这种情况我们可以使用(.+?)这个正则表达式来提取. 举例,一个字符串"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.Sre.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']


2. 连续多个位置的字符串提取


这种情况我们可以使用(?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 linebitsfor 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


帅帅马
7楼 · 2021-04-23 15:09

python 根据正则表达式提取指定的内容
正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事。

下面演示了在python里,通过正则表达式来提取符合要求的内容。

实例代码:
import re#   正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事。# 下面演示了在python里,通过正则表达式来提取符合要求的内容。有几个要注意# 的地方就是:# [1] 要用()将需要的内容包含起来# [2] 编号为0的group是整个符合正则表达式的内容,编号为1的是第一个(及对应# 的)包含的内容# @param regex: regular expression, use () to group the result# 正则表达式,用()将要提取的内容包含起来# @param content: # @param index: start from 1, depends on the \p regex's ()# 从1开始,可以通过数(来得到,其中0是全部匹配# @return: the first match of the \p regex# 只返回第一次匹配的内容def extractData(regex, content, index=1): r = '0' p = re.compile(regex) m = p.search(content) if m: r = m.group(index) return r regex = r'第(.*)场雪'content = '2002年的第一场雪'index = 1print extractData(regex, content, index)

相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,'\n'是换行,'\t'是tab,'\\'是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open('3_2.txt','r')linecount=len(file.readlines())linecache.getline('3_2.txt',linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问