[英]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.