Python Forum
Please support regex for version number (digits and dots) from a string - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Please support regex for version number (digits and dots) from a string (/thread-29029.html)



Please support regex for version number (digits and dots) from a string - Tecuma - Aug-14-2020

Hello Community,

I have the following string

"SYS"."M_SYSTEM_OVERVIEW" ('System', 'Version', '', '2.00.050.00.1592305219 (fa/hana2sp05)')
I need the version information
2.00.050.00.1592305219
from that string.

I tried several things via regex but all failed. One of my ideas was to use the first part until the version number as a own group.
m = re.search('("SYS"."M_SYSTEM_OVERVIEW" \(\'System\', \'Version\', \'\', \')(\S+)(.+)', line)
Version =  m.group(2)
This lead to an AttributeError: 'NoneType' object has no attribute 'group'
How should I design patterns to get this?
Also I am not sure when to escape in that string and when not.

Can someone please assist.

Regards

--Christian


RE: Please support regex for version number (digits and dots) from a string - bowlofred - Aug-14-2020

What's the purpose for parsing it? There are a couple of tools that can be used to compare "version-like" strings. 'packaging.version' is probably the standard parser.


RE: Please support regex for version number (digits and dots) from a string - Tecuma - Aug-14-2020

Hello bowlofred,

I am analyzing several files with different kind of information with a Python script. One part is to get this version information.

Regards

--Christian


RE: Please support regex for version number (digits and dots) from a string - metulburr - Aug-15-2020

i usually avoid regex unless absolutely required. Here it is not because you can parse the string through process of elimination. And based on the fact that your regex string contains this in every file.

s = '''"SYS"."M_SYSTEM_OVERVIEW" ('System', 'Version', '', '2.00.050.00.1592305219 (fa/hana2sp05)')'''
version = s.split(',')[3].split(' ')[1].strip("'")
print(version)
outputs from elimination to final desired output. From why each index was selected from a certain split character
Output:
metulburr@metulburr:~$ python3 test2.py ['"SYS"."M_SYSTEM_OVERVIEW" (\'System\'', " 'Version'", " ''", " '2.00.050.00.1592305219 (fa/hana2sp05)')"] metulburr@metulburr:~$ python3 test2.py '2.00.050.00.1592305219 (fa/hana2sp05)') metulburr@metulburr:~$ python3 test2.py ['', "'2.00.050.00.1592305219", "(fa/hana2sp05)')"] metulburr@metulburr:~$ python3 test2.py '2.00.050.00.1592305219 metulburr@metulburr:~$ python3 test2.py 2.00.050.00.1592305219
The only thing that has to be added is obtaining the original string section from the file which could be different based on what the content of the file contains. You would have to find something unique in that string in comparison to parse out the rest of the file. Or for example if it has 1000 commas in the file, the index could be 98 instead of 3, etc.


RE: Please support regex for version number (digits and dots) from a string - Tecuma - Aug-17-2020

Hello metullburr,

thank you for your answer and taking time.

This one works.

I have slept a few nights over this. I found a solution with regex.

import re

s = '''"SYS"."M_SYSTEM_OVERVIEW" ('System', 'Version', '', '2.00.050.00.1592305219 (fa/hana2sp05)')'''
m = re.search('(Version)(\D+)(\S+)', s)
test1 = m.group(1)
test2 = m.group(2)
test3 = m.group(3)

print("string = ", s)
print("test1: ", test1)
print("test2: ", test2)
print("test3: ", test3)
This one gives me also the Version string I am looking for. I will see which solution I will use in my script.
I will mark my thread as solved.

Regards

--Christian