I have string like so:
"Job 1233:name_uuid (table n_Cars_1234567$20220316) done. Records: 24, with errors: 0."
I'd like to retieve the datte from the table name, so far I use:
"\$[0-9] "
but this yields $20220316. How do I get only the date, without $?
I'd also like to get the table name: n_Cars_1234567$20220316
So far I have this:
pattern_table_info = "\(([^\)] )\)"
pattern_table_name = "(?<=table ).*"
table_info = re.search(pattern_table_info, message).group(1)
table = re.search(pattern_table_name, table_info).group(0)
However I'd like to have a more simpler solution, how can I improve this?
CodePudding user response:
You can use a regex with two capturing groups:
table\s ([^()]*\$([0-9] ))
See the regex demo. Details:
table
- a word\s
- one or more whitespaces([^()]*\$([0-9] ))
- Group 1:[^()]*
- zero or more chars other than(
and)
\$
- a$
char([0-9] )
- Group 2: one or more digits.
See the Python demo:
import re
text = "Job 1233:name_uuid (table n_Cars_1234567$20220316) done. Records: 24, with errors: 0."
rx = r"table\s ([^()]*\$([0-9] ))"
m = re.search(rx, text)
if m:
print(m.group(1))
print(m.group(2))
Output:
n_Cars_1234567$20220316
20220316
CodePudding user response:
You can write a single pattern with 2 capture groups:
\(table (\w \$(\d ))\)
The pattern matches:
\(table
(
Capture group 1\w \$
match 1 word characters and$
(\d )
Capture group 2, match 1 digits
)
Close group 1\)
Match)
See a Regex demo and a Python demo.
import re
s = "Job 1233:name_uuid (table n_Cars_1234567$20220316) done. Records: 24, with errors: 0."
m = re.search(r"\(table (\w \$(\d ))\)", s)
if m:
print(m.group(1))
print(m.group(2))
Output
n_Cars_1234567$20220316
20220316