[英]Regex search and grep everything between the second occurrence of first keyword and second keyword in a string - Python
[英]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.