簡體   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