簡體   English   中英

如何在python中使用擴展正則表達式?

[英]How to use extended regular expression in python?

嘗試獲取鏈接到字符串的特定數字-

輸入:

"9999 somekeyword --server1=1234 --server2=1011 --server3=1234 somekeyword 1234 somenumber"

預期產量:

"1234:server1|1011:server2|1234:server3|9999:process"

這是我的sed代碼,按預期工作正常,並在python中尋找替代方法-

echo "9999 somekeyword --server1=1234 --server2=1011 --server3=1234 somekeyword 1234 somenumber" \
| sed -r "s/([0-9]+) .+--server1=([0-9]+).+--server2=([0-9]+).+--server3=([0-9]+).+/\2:server1|\3:server2|\4:server3|\1:process/g"

1234:server1|1011:server2|1234:server3|9999:process

我正在嘗試使用以下方法在python中獲得相同的輸出-

p1="9999 somekeyword --server1=1234 --server2=1011 --server3=1234 somekeyword 1234 somenumber"
array = re.findall(r'[0-9]+',p1)
print(array)
['9999', '1', '1234', '2', '1011', '3', '1234', '1234']

任何獲得所需輸出的建議。

為什么不簡單地:

import re

p1="9999 somekeyword --server1=1234 --server2=1011 --server3=1234 somekeyword 1234 somenumber"
array = re.findall(r'(\d+) .+--server1=(\d+).+--server2=(\d+).+--server3=(\d+).+',p1)
print(array) # >> [('9999', '1234', '1011', '1234')]
import re 
p1="9999 somekeyword --server1=1234 --server2=1011 --server3=1234 somekeyword 1234 somenumber"
array = re.findall(r'server\d=[0-9]+',p1)
process = re.findall(r'^\d+',p1)
'|'.join([i.split('=')[-1]+':'+i.split('=')[0] for i in array]) + '|' + process[0] + ':process'
#'1234:server1|1011:server2|1234:server3|9999:process'

這個怎么樣?

import re
proc = p1.split()[0]
d = {'process': proc}
for server, value in re.findall(r'--server(\d+)=(\d+)', p1[len(proc)+1:]):
    d[server] = value

在這里(使用Python 3.6 f格式):

import re

s = "9999 somekeyword --server1=1234 --server2=1011 --server3=1234 somekeyword 1234 somenumber"
res = ''
for m in re.findall(r'(?:([0-9]+) \S+)?\s+--(server\d+)=(\d+)', s):
    if m[0]: proc = f'{m[0]}:process'  # capture process number
    res += f'{m[2]}:{m[1]}|'
res += proc

print(res)   # 1234:server1|1011:server2|1234:server3|9999:process

暫無
暫無

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

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