嘗試在沒有骰子的情況下在整個堆疊溢位中查找此內容。我有這個測驗檔案
declare -a IP_LIST=(
'x.x.x.x/24'
'x.x.x.x/24'
'x.x.x.x/24'
'x.x.x.x/24'
'x.x.x.x/24'
'x.x.x.x/28'
)
我需要在這中間獲取 IP 并將它們放入一個陣列中(檔案的其余部分只是更多的 bash 代碼)
嘗試使用類似下面的東西,但它只是不回傳
list=re.search("IP_LIST=\(\n[\n.]*\)", out1)
uj5u.com熱心網友回復:
使用 Pypi regex 模塊,您可以使用\G正則運算式:
(?:^declare -a IP_LIST=\(|(?!^)\G)\s*'([^'] )'(?=[^()]*\))
正則運算式演示
代碼:
import regex
rx = r"(?:^declare -a IP_LIST=\(|(?!^)\G)\s*'([^'] )'(?=[^()]*\))"
s = ("declare -a IP_LIST=(\n"
" 'x.x.x.x/24'\n"
" 'x.x.x.x/24'\n"
" 'x.x.x.x/24'\n"
" 'x.x.x.x/24'\n"
" 'x.x.x.x/24'\n"
" 'x.x.x.x/28'\n"
")")
print (regex.findall(rx, s))
輸出:
['x.x.x.x/24', 'x.x.x.x/24', 'x.x.x.x/24', 'x.x.x.x/24', 'x.x.x.x/24', 'x.x.x.x/28']
正則運算式詳情:
(?:: 啟動非捕獲組^declare -a IP_LIST=\(: 匹配declare -a IP_LIST=(行首|: 或者(?!^)\G: 從上一場比賽結束的位置開始
): 結束非捕獲組\s*: 匹配可選的空白字符': 比賽開場'([^'] ):匹配引號之間的文本并將其捕獲組#1': 比賽結束'(?=[^()]*\)): 正向預測以確保我們)在當前倉位之前關閉而不匹配(或)介于兩者之間
uj5u.com熱心網友回復:
如果您不介意使用多個步驟,這可能是一個解決方案。
out1 = """declare -a IP_LIST=(
'x.x.x.x/24'
'x.x.x.x/24'
'x.x.x.x/24'
'x.x.x.x/24'
'x.x.x.x/24'
'x.x.x.x/28'
)"""
data = re.search(r"IP_LIST=\(((\s*'([x./0-9] )') )", out1) # , re.MULTILINE)
print(data.group(1))
您可能想要洗掉[x./0-9]真實 IP 地址中的“x” 。
這會給你
'x.x.x.x/24'
'x.x.x.x/24'
'x.x.x.x/24'
'x.x.x.x/24'
'x.x.x.x/24'
'x.x.x.x/28'
基于該結果,我們可以繼續進行簡單的字串操作
result = [ip.strip("' ") for ip in data.group(1).strip().split('\n')]
print(result)
現在的結果是['x.x.x.x/24', 'x.x.x.x/24', 'x.x.x.x/24', 'x.x.x.x/24', 'x.x.x.x/24', 'x.x.x.x/28']。
如果您也想洗掉子網,請將創建結果的行更改為
result = [ip.split('/')[0].strip("' ") for ip in data.group(1).strip().split('\n')]
按照評論中的要求解釋正則運算式:
我們有IP_LIST=\(((\s*'([x./0-9] )') )。IP_LIST=\(匹配“IP_LIST=(”。這給我們留下了((\s*'([x./0-9] )') )。外括號用于定義將包含我們稍后想要獲取的文本的組。去掉它們,我們有(\s*'([x./0-9] )') 。
讓我們首先關注\s*'([x./0-9] )'. \s*匹配一堆潛在的空格(空格、制表符、換行符……)。然后我們有一個文字'. 以下組定義了一組字符:([x./0-9] 其中 0-9 定義了 0-9 的數字/字符)。正如您所看到的,所有這些字符都用于示例中的 ip 地址(正如我所說,“x”是由于示例資料,可能會在最終代碼中洗掉)。此集合中的字符可以并且將重復多次,因此我們添加加號:[x./0-9] 。最后一個字符又是一個文字'。
有趣的來了。我們剛剛解釋了\s*'([x./0-9] )'它定義了一些空格,然后是一個 ip 地址。這可能會在多行中重復多次。因此,我們將其括在括號中并添加 a 以允許重復此部分。現在我們回到((\s*'([x./0-9] )') ).
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/377528.html
下一篇:正則運算式第一場比賽
