简体   繁体   中英

How to use extended regular expression in python?

Trying to fetch specific number which is linked to a string -

Input:

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

Expected Output:

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

Here is my sed code which is working fine as expected and looking for alternative in 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

I am trying to get the same output in python using below -

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']

any suggestion to get the desired output.

Why not simply:

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'

How's this?

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

Here you go (with Python 3.6 f -formatting):

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM