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

时间:2017-11-07 15:14:08

标签: python string search split

我有一个大文档,我试图从使用Pythonv3中提取某些数据。重复类似于下面的文本,我想在每次识别“pic =”和“originalName =”字符串时提取“123456789”和“987654321”。

  

“这是一些文字pic = 123456789更多文字originalName =”987654321.jpg然后更多文字“

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

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']

答案 1 :(得分:1)

您想要为regular expressions使用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)将返回&#34; apple&#34;在s。但是,有几个特殊meaning的字符可以帮助描述更一般的模式。

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

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

(?<= ... )被称为积极的外观。如果...中描述的模式之前的模式,则会返回匹配项。

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

所以'(?<=pic\=)\d+'匹配任何长度的数字序列,前面是字符串pic='(?<=originalName\=\")\d+'匹配以字符串originalName="开头的数字序列。

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