繁体   English   中英

使用Python从子字符串中提取某些字符串

[英]Extracting certain strings from a substring using Python

我有一个很大的文档,我试图从使用Pythonv3中提取某些数据。 重复类似于以下内容的文本,并且每当标识“ pic =“和“ originalName =””字符串时,我都希望提取“ 123456789”和“ 987654321”。

“这是一些文本pic = 123456789一些其他文本originalName =“ 987654321.jpg然后是一些其他文本”

有人可以协助吗?

您可以尝试以下方法:

import re
s= 'this is some text pic=123456789 some more text originalName="987654321.jpg then some more text'
data = re.findall('(?<=pic\=)\d+|(?<=originalName\=\")\d+', s)

输出:

['123456789', '987654321']

您需要将python的库用于正则表达式 正则表达式是搜索文本模式的有用方法。 在这种情况下,其他评论者已经提供了一个有效的代码段:

import re
s= 'this is some text pic=123456789 some more text originalName="987654321.jpg then some more text'
data = re.findall('(?<=pic\=)\d+|(?<=originalName\=\")\d+', s)

乍一看这似乎是胡说八道,所以这里是一个细分:

re.findall将所有匹配返回给指定字符串中的指定模式。

findall的第一个参数是正则表达式模式,用单引号引起来。 正则表达式可以只是一个单词; re.findall('apple', s)将返回re.findall('apple', s) “ apple”一词的所有实例。 但是,有几个具有特殊含义的字符可以帮助描述更通用的模式。

\\d匹配0-9的任何数字。 \\d+匹配任意长度的数字0-9序列。

| 在中间分隔两个正则表达式。 如果任何一个模式都匹配,则整个表达式返回匹配项。

(?<= ... )被称为正向后看。 如果在... 之前有一个模式,则返回匹配项。

="具有特殊含义,因此\\=\\"指定应该正常使用这些字符。

因此'(?<=pic\\=)\\d+'匹配一个以字符串pic=开头的任意长度的数字序列。 并且'(?<=originalName\\=\\")\\d+'匹配一系列数字,其后为字符串originalName="

findall的第二个参数只是用于搜索这些模式的字符串。 因此re.findall('(?<=pic\\=)\\d+|(?<=originalName\\=\\")\\d+', s)将搜索s并返回所有带pic=的数字序列,以及所有在它们之前带有originalName="的数字序列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM