我有一个大文档,我试图从使用Pythonv3中提取某些数据。重复类似于下面的文本,我想在每次识别“pic =”和“originalName =”字符串时提取“123456789”和“987654321”。
“这是一些文字pic = 123456789更多文字originalName =”987654321.jpg然后更多文字“
有人可以帮忙吗?
答案 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="
的所有数字序列。