簡體   English   中英

Python Regex查詢第二次出​​現的字符串A和字符串B之間的子字符串

[英]Python Regex query for substring between the second occurrence of string A and string B

我正在嘗試從原始輸出中解析某些值,並且正則表達式表達式遇到困難。 原始字符串包含兩個或多個具有相同“ start”關鍵字的值。 這是我到目前為止所擁有的,這使我有了第一個實例:

def parser(s, start, end):
    try:
        result = re.search('%s(.*)%s' % (start, end), s).group(1).strip()
    except:
        result = ""
    print(result)
    return result

如何在相同的“開始”和“結束”之間獲得第二個實例? 提前致謝!

例:

s = "verylongstring\n   Name Server: IDNS1.NETSOL.COM\n   Name Server: IDNS2.NETSOL.COM\n   Status: clientTransferProhibited...."
start = "Name Server: "
end = "\n"

所需的輸出:

server1 = IDNS1.NETSOL.COM
server2 = IDNS2.NETSOL.COM

我可以獲取server1,但不能獲取2。

server1 = parser(s, start, end)
s = "verylongstring\n   Name Server: IDNS1.NETSOL.COM\n   Name Server: IDNS2.NETSOL.COM\n   Status: clientTransferProhibited...."
start = "Name Server: "
end = "\n"
import re
re.findall(start + "(.*?)" + end, s)

輸出為:

['IDNS1.NETSOL.COM', 'IDNS2.NETSOL.COM']

函數可以是這樣的:

def parser(s, start, end):
    result = [l.strip() for l in re.findall(start + "(.*?)" + end, s)]
    return result

對於相同的s start end

>>>parser(s, start, end)
>>>['IDNS1.NETSOL.COM', 'IDNS2.NETSOL.COM']

這適用於給定的示例。

def parser(s, start, end):
    arr = [x.split(start)[1] for x in s.split('\n') if start in x]
    return arr

您還可以使用re.finditer來創建一個迭代器,該迭代器將用盡直到字符串結尾:

>>> import re
>>> pat = re.compile(r'Name Server:(?P<Server_Name>.*?)\n')
>>> 
>>> s
'verylongstring\n   Name Server: IDNS1.NETSOL.COM\n   Name Server: IDNS2.NETSOL.COM\n   Status: clientTransferProhibited....'
>>> 
>>> 
>>> for match in pat.finditer(s):
        print(match.group('Server_Name').strip())


IDNS1.NETSOL.COM
IDNS2.NETSOL.COM
>>> 
>>> [match.group('Server_Name').strip() for match in pat.finditer(s)]
['IDNS1.NETSOL.COM', 'IDNS2.NETSOL.COM']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM